Това не е възможно с възможностите на mysql regex (освен ако не инсталирате някои udf, които изглежда са предназначени за това). Технически, тъй като [0-9] е ограничен набор, можете да хвърлите 10 LOCATE
е в 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 |
+---------+
Ако имате нужда гледам на udf. В противен случай е по-добре да извлечете полето и да го манипулирате извън MySQL.
Редактиране:ако числото се побира в цяло число , мръсното хакерство може да доведе до :
SET @var ='asjdasd35433';
SELECT SUBSTRING(@var,1,LENGTH(@var)-LENGTH(CAST(REVERSE(@var) as UNSIGNED)));
+---------+
| result |
+---------+
| asjdasd |
+---------+