这对于 mysql 正则表达式功能来说是不可能的(除非安装一些似乎是为此设计的 udf)。从技术上讲,由于 [0-9] 是一个有限的集合,因此您可以抛出 10LOCATE
's in LEAST
(注意 & invalitdate 0),并使用SUBSTRING
。不是一张漂亮的照片:
SET @var ='asjdasd35433';
SELECT SUBSTRING(@var,1,
LEAST(
IF(LOCATE(0,@var)=0,LENGTH(@var),LOCATE(0,@var)),
IF(LOCATE(1,@var)=0,LENGTH(@var),LOCATE(1,@var)),
IF(LOCATE(2,@var)=0,LENGTH(@var),LOCATE(2,@var)),
IF(LOCATE(3,@var)=0,LENGTH(@var),LOCATE(3,@var)),
IF(LOCATE(4,@var)=0,LENGTH(@var),LOCATE(4,@var)),
IF(LOCATE(5,@var)=0,LENGTH(@var),LOCATE(5,@var)),
IF(LOCATE(6,@var)=0,LENGTH(@var),LOCATE(6,@var)),
IF(LOCATE(7,@var)=0,LENGTH(@var),LOCATE(7,@var)),
IF(LOCATE(8,@var)=0,LENGTH(@var),LOCATE(8,@var)),
IF(LOCATE(9,@var)=0,LENGTH(@var),LOCATE(9,@var))
) -1 ) as 'result';
+---------+
| result |
+---------+
| asjdasd |
+---------+
If you need它看看udf的。否则,您最好获取该字段并在 MySQL 外部对其进行操作。
编辑:如果数字适合整数,肮脏的黑客行为可能会导致:
SET @var ='asjdasd35433';
SELECT SUBSTRING(@var,1,LENGTH(@var)-LENGTH(CAST(REVERSE(@var) as UNSIGNED)));
+---------+
| result |
+---------+
| asjdasd |
+---------+