使用 sql 查询搜索子字符串
Search a substring with sql query
在我的 SQLite 数据库中,我有一列包含一系列值,例如 #7 qsqjjsqdzdsql
。 qsqjjsqdzdsql
是可变的。列类型为 TEXT
。
我想从所有行中提取数字,然后得到最大的一个。
首先,我认为最好的解决方案是使用 substring
函数来实现,但数字的长度可能会有所不同。也许regexp
,但我找不到合适的模式(以#[1-9]space开头)
编辑:
比如我一列有4行
#7 qslqsendds
#78 mdsldpedd
#3 dmsdlef
#6 sdefzmdsdos
我只想得到最大的数字。比如这里是78
。
我想要 78
(不是 #78
,不是 78 mdsldpedd
)。
您可以使用instr
找到space的位置,然后使用substr
提取它前面的数字。然后你可以将它转换为 int
,并查询它的 max
:
SELECT MAX(CAST(SUBSTR(col1, 2, INSTR(col1, ' ') - 1) AS INT))
FROM table1
您所要做的就是用 SUBSTR(col, 2)
.
去掉开头的 '#'
SQLite 将通过添加 0
:
将 '7 qslqsendds'
之类的字符串隐式转换为数字 7
SELECT MAX(SUBSTR(col, 2) + 0) AS max_col
FROM tablename
参见demo。
在我的 SQLite 数据库中,我有一列包含一系列值,例如 #7 qsqjjsqdzdsql
。 qsqjjsqdzdsql
是可变的。列类型为 TEXT
。
我想从所有行中提取数字,然后得到最大的一个。
首先,我认为最好的解决方案是使用 substring
函数来实现,但数字的长度可能会有所不同。也许regexp
,但我找不到合适的模式(以#[1-9]space开头)
编辑:
比如我一列有4行
#7 qslqsendds
#78 mdsldpedd
#3 dmsdlef
#6 sdefzmdsdos
我只想得到最大的数字。比如这里是78
。
我想要 78
(不是 #78
,不是 78 mdsldpedd
)。
您可以使用instr
找到space的位置,然后使用substr
提取它前面的数字。然后你可以将它转换为 int
,并查询它的 max
:
SELECT MAX(CAST(SUBSTR(col1, 2, INSTR(col1, ' ') - 1) AS INT))
FROM table1
您所要做的就是用 SUBSTR(col, 2)
.
去掉开头的 '#'
SQLite 将通过添加 0
:
'7 qslqsendds'
之类的字符串隐式转换为数字 7
SELECT MAX(SUBSTR(col, 2) + 0) AS max_col
FROM tablename
参见demo。