在MySQL中分割字符和数字

问题描述 投票:0回答:2

我的表格中有这样一列,

students
--------
abc23
def1
xyz567
......

等等。现在我需要像名字一样的输出 需要输出为

students
--------
abc
def
xyz

我怎样才能在mysql中得到这个。先谢谢了。

mysql
2个回答
3
投票

您可以使用字符串函数和一些

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 |
+------+

0
投票

解决方案可以如下:

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;
© www.soinside.com 2019 - 2024. All rights reserved.