可能的重复项:
如何使用 SQL 从字符串末尾删除数字
如果我有一个看起来像这样的 sqlite 表Songs
:
id SongName
------------------
0 midnight
1 Another song
2 01 midnight01
3 01 01 midnight
4 Another record
5 1 midnight
使用选择或更新以及 REGEX 表达式,什么会返回这个?
id SongName
------------------
0 midnight
1 Another song
2 midnight01
3 midnight
4 another record
5 midnight
我用过
从歌曲名称 REGEXP '\b^[0-9]\b' 的歌曲中选择歌曲名称
或
从歌曲名称 REGEXP '\d' 的歌曲中选择歌曲名称
但仍然没有得到我想要的结果。
抱歉,我不熟悉 C 接口。但是,如果您在只找到合适的正则表达式时遇到问题,这可能会起作用。
(d+s)+(.*)
它匹配随机数量的数字-空格组合,如果您返回带有 $2
或 2
的第二个捕获组,则最终会得到歌曲标题。
注意:这需要在要删除的数字和实际歌曲标题之间留出空格。它匹配"01 01 一些文本"和"11 一些文本"就好了(第二个捕获组返回"一些文本")。但是,如果您匹配"01 01some文本",则最终会得到"01some文本"(仅删除空格之前的数字)。
更新。这可能会起作用。它仅选择歌曲标题。与上述注释相同。
[^d+s]+.*
文档:
因此,换句话说REGEXP 运算符是 regexp() 用户的特殊语法 功能。默认情况下没有定义 regexp() 用户函数,因此使用 的 REGEXP 运算符通常会导致错误消息。如果 在运行时添加了名为"regexp"的应用程序定义的SQL函数, 将调用该函数以实现正则表达式 算子。
MATCH 运算符是 match() 的特殊语法 应用程序定义的函数。默认的 match() 函数 实现会引发异常,并且对于 什么。但是扩展可以用更多覆盖 match() 函数 有用的逻辑。
,您必须使用 C 接口来覆盖其中一个或两个运算符。
老实说,最好的方法是重组数据。 歌曲名称的数字部分要么无用(在这种情况下,它们首先不应该存在),要么没有(在这种情况下,它们需要在自己的列中)。