2012-04-11 67 views
0

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

使用选择或更新与正则表达式的表情,什么会回来吗?:

id SongName  
------------------ 
0 midnight 
1 Another song 
2 midnight01 
3 midnight 
4 another record 
5 midnight 

我使用

从歌曲选择SONGNAME其中SONGNAME REGEXP '\ b^[0-9] \ B'

从歌曲选择SONGNAME其中SONGNAME REGEXP“\ d '

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

+0

@FrancisP,我编辑我的问题更具体,但即使是这样,这是一个远夸张地说这是一个“可能”复制,张贴在这个问题的答案也不会帮助我,这个问题本身是不同。 – 2012-04-11 19:00:11

回答

1

对不起,我不熟悉C接口。但是如果你在找到合适的正则表达式时遇到问题,这可能会奏效。

(\d+\s)+(.*) 

它匹配数量空白组合的随机量,如果用$2\2返回第二个捕获组,你最终的歌名。

注意:这需要您想要删除的数字和实际歌曲标题之间的空格。它匹配“01 01一些文本”和“11一些文本”就好了(第二个捕获组返回“一些文本”)。但是如果你匹配“01 01some text”,你最终会得到“01some text”(只有在空格被删除之前的数字)。

更新。这可能工作。它只选择歌曲标题。相同的注释适用于上述。

[^\d+\s]+.* 
0

Quoting from the documentation:

正则表达式运算符是用于正则表达式()用户 功能的特殊语法。默认情况下,没有定义regexp()用户函数,因此使用REGEXP运算符的 通常会导致错误消息。如果在运行时添加名为“regexp”的应用程序定义的SQL函数 ,则将调用该函数以实现REGEXP 运算符。 () 应用程序定义的函数。默认的匹配()函数 实现引发一个异常,对于 什么都不是很有用。但是扩展可以用更多的 有用的逻辑覆盖match()函数。

因此,换句话说,您必须登录use the C interface to override one or both of these operators

说实话,最好的办法是重组你的数据。歌曲名称的数字部分是无用的(在这种情况下,他们不应该在那里)或不(在这种情况下,他们需要在他们自己的专栏中)。

+0

我编辑了我的问题,以反映我只想在歌曲名称的开头删除数字字符。 – 2012-04-11 19:03:23

+0

无论如何,您需要重写'regex'和/或'match'运算符来分割它。同样,歌曲名称列的数字部分不应该在那里,或者应该在其自己的单独列中。重组您的数据。 – 2012-04-11 19:05:11

+0

@Brandon我也有数据重组选项。实际的歌曲名称可能会以一个数字开头,所以您最终会得到一首不完整的歌曲名称。如果重组不是重要选项,您可以插入某种分隔符来区分要从歌名中删除的数字。然后可以匹配数字+分隔符并将它们从结果集中移除。 (现在不要真的,如果可能的话,至少可以在网页上回显结果。) – 2012-04-11 20:07:31

相关问题