【发布时间】:2021-11-21 06:21:34
【问题描述】:
我有一列包含版本号作为字符串,如:
- 2.7.0.0
- 2.6.12.0
- 3.30.3.0
- 更多
如何选择所有版本号低于 2.7.0.0 的条目?
自从my last question 被关闭是因为obviouse answere 我的问题是这样的:
WITH split(word, str) AS (
SELECT '', '2.7.0.0'||'.'
UNION ALL SELECT
substr(str, 0, instr(str, '.')),
substr(str, instr(str, '.')+1)
FROM split WHERE str!=''
) SELECT word FROM split WHERE word!='';
对此我有多个问题:
- 此示例仅在
.处拆分字符串。如何将其构建到查询中,而不仅仅是将字符串硬编码到其中? (尝试用(select version from software)替换'2.7.0.0'没有运气) - 我需要将版本
2.7.0.0放在哪里以便在此查询中进行比较?
编辑:
我只使用第一个数字:
select version from software where (
select word as major from (WITH split(word, str) AS (
SELECT '', version||'.'
UNION ALL SELECT
substr(str, 0, instr(str, '.')),
substr(str, instr(str, '.')+1)
FROM split WHERE str!=''
) SELECT word FROM split WHERE word!='' LIMIT 1) where word = "2"
)
【问题讨论】:
-
澄清您的问题。您想拆分字符串以获取子值,还是将它们相互比较以获得 >、
-
@MarkBenningfield 它写在标题“[...] compre version string [...]”以及“如何选择版本号lower 比 [...]" 我显然是想比较它。我没有问如何拆分版本字符串..
-
好吧,你是说
select "colName" from "tableName" where "colName" < '2.7.0.0'不起作用吗?它应该。 -
fml,这确实有效...我没有尝试它,因为我从没想过它会起作用...我确实想过复杂的方法