从 select 语句中,在一个字段中,我想删除最后一个字符是字符(如果它的编号)。MySQL中是否有可用的字符串函数?
对于我想要的这两个 SQL
测试
作为输出
select 'test1';
select 'test';
从 select 语句中,在一个字段中,我想删除最后一个字符是字符(如果它的编号)。MySQL中是否有可用的字符串函数?
对于我想要的这两个 SQL
测试
作为输出
select 'test1';
select 'test';
要删除最后一个字符(如果它是数字),不使用正则表达式的一种方法是使用LEFT
,RIGHT
和LENGTH
:
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;
当在 MySQL 中将字段转换为整数/有符号时,它将所有数字字符转换为第一个非数字字符——从而使REVERSE
工作正常。如果最后一个字符不是数字,则结果为 0。
使用IF
上面的检查,如果最后一个字符不是数字,则打印原始值,否则打印除最后一个字符之外的所有字符。
另一种方法是使用REGEXP
,
SET @val = 'test12';
SELECT CONCAT(LEFT(@val, CHAR_LENGTH(@val) - 1),
IF(RIGHT(@val, 1) REGEXP '[0-9]' = 0, RIGHT(@val, 1), ''))
这是一个指针:
在两个查询之间使用联合。
在第一个 - 要么使用正则表达式,要么获取字段的 substr,其中最后一个字符的另一个 substr 是一个数字,
然后联合文本字段,其中最后一个字符的 substr 不是数字。
您可能想在 MySQL 中使用正则表达式。这个包可能会帮助你https://launchpad.net/mysql-udf-regexp。但是,我不建议在 MySQL 语句中这样做,因为它可能会很慢。您最好在获取编程语言中的值之后再做。