【问题标题】:How to remove first letter if it is number in sql?如果是sql中的数字,如何删除第一个字母?
【发布时间】:2018-06-30 17:40:06
【问题描述】:


如果是sql中的数字,如何去掉首字母?
我的 sql 中有一些值
(即)

Psalm. 121:7
1Peter 3:4
James 1:22
2Timothy 4:2

这里第一个和第三个值是正确的,但是第二个和第四个值我需要删除数字。 如何通过sql查询做到这一点?

我想要结果

诗篇。 121:7 = 诗篇。 121:7
1彼得 3:4 = 彼得 3:4
雅各书 1:22 = 雅各书 1:22
2提摩太书 4:2 = 提摩太书 4:2

【问题讨论】:

  • 我认为你需要一个regex replace。 1. 编写您的用户定义函数 (UDF) 来实现正则表达式来替换 2. 切换到具有内置函数的 MariaDB。
  • 你可以查看答案here
  • 但它会删除我数据中的所有数字。我不想要这个。我只需要删除第一个字符,如果它的数字@SibaprasadMaiti

标签: mysql sql csv


【解决方案1】:

您可以使用字符串过滤的 RIGHT() 部分,其中第一个是数字,例如:

SELECT  right(my_column, LENGTH(my_column)-1)
FROM    my_table
WHERE   my_column REGEXP '^[0-9]'

用于更新(删除数字)您可以使用

Update my_table
set my_column=  right(my_column, LENGTH(my_column)-1)

WHERE   my_column REGEXP '^[0-9]'

【讨论】:

  • @shriram 答案更新为删除号码
【解决方案2】:

你可以使用如下函数

CREATE DEFINER=`root`@`localhost` FUNCTION `stripFirstNumber`(in_str varchar(100)) RETURNS varchar(100) CHARSET latin1
BEGIN

declare first_char varchar(1);
declare len integer;
declare ret_val varchar(100);

set len = length(in_str);
if len > 0 then
    set first_char = substring(in_str, 1, 1);
    if find_in_set(first_char, '0,1,2,3,4,5,6,7,8,9') then
        return substring(in_str, 2, len-1);
    else
        return in_str;
    end if;
end if;

RETURN ret_val;
END

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2013-06-11
    相关资源
    最近更新 更多