可能重复:
How to remove digits from the end of the string using SQL
如果我有一个如下所示的sqlite表Songs
:
id SongName
------------------
0 midnight
1 Another song
2 01 midnight01
3 01 01 midnight
4 Another record
5 1 midnight
使用select或update和REGEX表达式会返回什么?:
id SongName
------------------
0 midnight
1 Another song
2 midnight01
3 midnight
4 another record
5 midnight
我用过
从SongName REGEXP'\ b ^ [0-9] \ b'
的歌曲中选择SongName或
从SongName REGEXP'\ d'
的歌曲中选择SongName但仍然没有得到我想要的结果。
答案 0 :(得分:1)
抱歉,我不熟悉C界面。但是如果你在找到合适的正则表达式时遇到问题,这可能会有效。
(\d+\s)+(.*)
它匹配随机数量的数字 - 空白组合,如果您使用$2
或\2
返回第二个捕获组,则最终会得到歌曲标题。
注意:您需要删除的数字和实际的歌曲标题之间需要一个空格。它匹配“01 01 some text”和“11 some text”就好了(第二个捕获组返回“some text”)。但如果你匹配“01 01some text”,你最终会得到“01some text”(只删除空格前的数字)。
更新。这可能会奏效。它只选择歌曲标题。同样的注意事项如上所述。
[^\d+\s]+.*
答案 1 :(得分:0)
Quoting from the documentation:
REGEXP运算符是regexp()用户的特殊语法 功能。默认情况下没有定义regexp()用户函数,因此请使用 REGEXP运算符通常会导致错误消息。如果一个 在运行时添加名为“regexp”的应用程序定义的SQL函数, 将调用该函数以实现REGEXP 操作
MATCH运算符是match()的特殊语法 应用程序定义的函数。默认的match()函数 实现引发异常,并没有真正有用 任何东西。但扩展可以覆盖match()函数 有用的逻辑。
所以,换句话说,你必须use the C interface to override one or both of these operators。
老实说,解决这个问题的最佳方法是重组数据。歌曲名称的数字部分是无用的(在这种情况下它们不应该在那里)或不是(在这种情况下,它们需要在他们自己的列中)。