【问题标题】:mysql remove last characters is character if its numbermysql删除最后一个字符是字符,如果它的数字
【发布时间】:2013-03-24 12:08:09
【问题描述】:

从 select 语句中,在一个字段中,我想删除最后一个字符是字符,如果它的数字。 MySQL 中是否有字符串函数?

对于这两个我想要的SQL

测试

作为输出

select 'test1';
select 'test';

【问题讨论】:

  • 你有这样的价值观吗? test12test123 还是只有 1 个数字?
  • 我希望只删除最后一个字符,fo test123,我想要 test12

标签: mysql


【解决方案1】:

另一种方法是使用REGEXP

SET @val = 'test12';
SELECT CONCAT(LEFT(@val, CHAR_LENGTH(@val) - 1), 
              IF(RIGHT(@val, 1) REGEXP '[0-9]' = 0, RIGHT(@val, 1), ''))

【讨论】:

    【解决方案2】:

    要删除最后一个字符(如果它是数字),不使用正则表达式的一种方法是使用 LEFTRIGHTLENGTH

    select if( right(yourfield,1) = 0 && right(yourfield,1) != '0', 
               yourfield, 
               left(yourfield, length(yourfield) - 1))
    from yourtable;
    

    要替换所有尾随数值,您可以使用REVERSE

    select if( cast(reverse(yourfield) as signed) = 0 && right(yourfield,1) != '0', 
               yourfield, 
               left(yourfield, length(yourfield) - length((reverse(yourfield) + 0))))
    from yourtable;
    

    SQL Fiddle Demo

    当在 MySQL 中将字段转换为整数/有符号时,它会将所有数字字符转换为第一个非数字字符——从而使REVERSE 工作。如果最后一个字符不是数字,则结果为 0。

    使用上面的IF 检查,如果最后一个字符不是数字,则打印原始值,否则打印除最后一个字符之外的所有字符。

    【讨论】:

      【解决方案3】:

      这是一个指针:

      在两个查询之间使用联合。

      在第一个 - 要么使用正则表达式,要么获取字段的子字符串,其中最后一个字符的另一个子字符串是数字,

      然后合并最后一个字符的substr不是数字的文本字段。

      【讨论】:

        【解决方案4】:

        您可能希望在 MySQL 中使用正则表达式。这个包可能会帮助你https://launchpad.net/mysql-udf-regexp。但是,我不建议在 MySQL 语句中执行此操作,因为它可能会很慢。您最好在获取编程语言中的值之后再做。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-09
          • 2021-11-16
          • 2021-11-20
          • 1970-01-01
          相关资源
          最近更新 更多