如何删除列中的所有起始数字字符?

时间:2012-04-11 18:48:23

标签: sql regex sqlite

  

可能重复:
  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

但仍然没有得到我想要的结果。

2 个答案:

答案 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

老实说,解决这个问题的最佳方法是重组数据。歌曲名称的数字部分是无用的(在这种情况下它们不应该在那里)或不是(在这种情况下,它们需要在他们自己的列中)。