0

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

对于我想要的这两个 SQL

测试

作为输出

select 'test1';
select 'test';
4

4 回答 4

1

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

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 小提琴演示

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

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

于 2013-04-03T00:59:26.583 回答
1

另一种方法是使用REGEXP,

SET @val = 'test12';
SELECT CONCAT(LEFT(@val, CHAR_LENGTH(@val) - 1), 
              IF(RIGHT(@val, 1) REGEXP '[0-9]' = 0, RIGHT(@val, 1), ''))
于 2013-04-03T01:02:03.020 回答
0

这是一个指针:

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

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

然后联合文本字段,其中最后一个字符的 substr 不是数字。

于 2013-04-03T00:42:35.833 回答
0

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

于 2013-04-03T00:44:39.267 回答