如何删除列中的所有开头数字字符



可能的重复项:
如何使用 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)+(.*)

它匹配随机数量的数字-空格组合,如果您返回带有 $22 的第二个捕获组,则最终会得到歌曲标题。

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

更新。这可能会起作用。它仅选择歌曲标题。与上述注释相同。

[^d+s]+.*
引用

文档:

REGEXP 运算符是 regexp() 用户的特殊语法 功能。默认情况下没有定义 regexp() 用户函数,因此使用 的 REGEXP 运算符通常会导致错误消息。如果 在运行时添加了名为"regexp"的应用程序定义的SQL函数, 将调用该函数以实现正则表达式 算子。

MATCH 运算符是 match() 的特殊语法 应用程序定义的函数。默认的 match() 函数 实现会引发异常,并且对于 什么。但是扩展可以用更多覆盖 match() 函数 有用的逻辑。

因此,换句话说

,您必须使用 C 接口来覆盖其中一个或两个运算符。

老实说,最好的方法是重组数据。 歌曲名称的数字部分要么无用(在这种情况下,它们首先不应该存在),要么没有(在这种情况下,它们需要在自己的列中)。

相关内容

最新更新