我遇到了问题,在我的数据库中我的价值是这样的:
GSB45-B, GSBD60-01, 等
现在我需要从这些字符串中获取值 GSB / GSBD 。所以实际上我需要从te开始到第一个整数的第一个字符。
希望有人可以帮助我,谢谢你们。
答案 0 :(得分:3)
这是一个笨重的解决方案,但你可以尝试:
SELECT
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(SUBSTRING_INDEX(column, '-', 1), '0', ''), '1', ''), '2', ''), '3', ''), '4', ''), '5', ''), '6', ''), '7', ''), '8', ''), '9', '') AS extracted
FROM
yourtbl
答案 1 :(得分:1)
这个怎么样?
SELECT
myWord,
SUBSTR(myWord,1,LEAST (
if (Locate('0',myWord) >0,Locate('0',myWord),999),
if (Locate('1',myWord) >0,Locate('1',myWord),999),
if (Locate('2',myWord) >0,Locate('2',myWord),999),
if (Locate('3',myWord) >0,Locate('3',myWord),999),
if (Locate('4',myWord) >0,Locate('4',myWord),999),
if (Locate('5',myWord) >0,Locate('5',myWord),999),
if (Locate('6',myWord) >0,Locate('6',myWord),999),
if (Locate('7',myWord) >0,Locate('7',myWord),999),
if (Locate('8',myWord) >0,Locate('8',myWord),999),
if (Locate('9',myWord) >0,Locate('9',myWord),999)
)-1) as NewString
FROM myTable;
同时阅读,Using alias name in another column。这与您的问题相同。
答案 2 :(得分:1)
DELIMITER |
CREATE FUNCTION digits( str CHAR(32) ) RETURNS CHAR(32)
BEGIN
DECLARE i, len SMALLINT DEFAULT 1;
DECLARE ret CHAR(32) DEFAULT '';
DECLARE c CHAR(1);
SET len = CHAR_LENGTH( str );
label1: LOOP
REPEAT
BEGIN
SET c = MID( str, i, 1 );
IF c BETWEEN '0' AND '9' THEN
SET ret=SUBSTRING( str, 1, i-1);
LEAVE label1;
END IF;
SET i = i + 1;
END;
UNTIL i > len END REPEAT;
END LOOP label1;
RETURN ret;
END |
DELIMITER ;
select digits('GSB45-B'),digits('GSBD60-01') ,digits('KKGSBD60-01') ;
答案 3 :(得分:0)
MySQL无法进行REGEXP提取,这真是一件令人伤心的事情:(
假设您的值的模式为[A-Z]*[0-9]{2}-.*
,您可以使用这个丑陋的东西:
SELECT
LEFT(
SUBSTRING_INDEX("GSB45-B", "-", 1),
LENGTH(SUBSTRING_INDEX("GSB45-B", "-", 1)) - 2
) as CODE;
但我建议你在应用程序端进行解析:)