我的表格中有这样一列,
students
--------
abc23
def1
xyz567
......
等等。现在我需要像名字一样的输出 需要输出为
students
--------
abc
def
xyz
我怎样才能在mysql中得到这个。先谢谢了。
您可以使用字符串函数和一些
CAST()
魔法来做到这一点:
SELECT
SUBSTR(
name,
1,
CHAR_LENGTH(@name) - CHAR_LENGTH(
IF(
@c:=CAST(REVERSE(name) AS UNSIGNED),
@c,
''
)
)
)
FROM
students
例如:
设置@name:='abc12345'; mysql> SELECT SUBSTR(@name, 1, CHAR_LENGTH(@name) - CHAR_LENGTH(IF(@c:=CAST(REVERSE(@name) AS UNSIGNED), @c, ''))) AS 名称; +------+ |名称 | +------+ | ABC | +------+
解决方案可以如下:
select students,
substr(students, -length(students), least(
if(locate('0', students)=0, length(students), locate('0', students)),
if(locate('1', students)=0, length(students), locate('1', students)),
if(locate('2', students)=0, length(students), locate('2', students)),
if(locate('3', students)=0, length(students), locate('3', students)),
if(locate('4', students)=0, length(students), locate('4', students)),
if(locate('5', students)=0, length(students), locate('5', students)),
if(locate('6', students)=0, length(students), locate('6', students)),
if(locate('7', students)=0, length(students), locate('7', students)),
if(locate('8', students)=0, length(students), locate('8', students)),
if(locate('9', students)=0, length(students), locate('9', students))
)-1) as nonDigitsPart,
substr(students,least(
if(locate('0', students)=0, length(students), locate('0', students)),
if(locate('1', students)=0, length(students), locate('1', students)),
if(locate('2', students)=0, length(students), locate('2', students)),
if(locate('3', students)=0, length(students), locate('3', students)),
if(locate('4', students)=0, length(students), locate('4', students)),
if(locate('5', students)=0, length(students), locate('5', students)),
if(locate('6', students)=0, length(students), locate('6', students)),
if(locate('7', students)=0, length(students), locate('7', students)),
if(locate('8', students)=0, length(students), locate('8', students)),
if(locate('9', students)=0, length(students), locate('9', students))
)) as digitsPart
from theTable;