Điều này không thể thực hiện được với capablities mysql regex (trừ khi cài đặt một số udf có vẻ được thiết kế cho điều đó). Về mặt kỹ thuật, vì [0-9] là một tập hợp giới hạn, bạn có thể ném 10 LOCATE
của LEAST
(coi chừng &vô hiệu hóa 0) và sử dụng SUBSTRING
. Không phải là một bức tranh đẹp:
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 |
+---------+
Nếu bạn cần nó nhìn vào udf's. Nếu không, tốt hơn hết bạn nên tìm nạp trường và thao tác với nó bên ngoài MySQL.
Chỉnh sửa:nếu số vừa với số nguyên , hackery bẩn thỉu có thể dẫn đến:
SET @var ='asjdasd35433';
SELECT SUBSTRING(@var,1,LENGTH(@var)-LENGTH(CAST(REVERSE(@var) as UNSIGNED)));
+---------+
| result |
+---------+
| asjdasd |
+---------+