3

問題が発生しました。データベースには次のような値があります。

GSB45-B、GSBD60-01など

これらの文字列から値GSB / GSBDを取得する必要があります。したがって、実際には、開始から最初の整数までの最初の文字が必要です。

うまくいけば、誰かが私を助けてくれるでしょう、今からありがとう。

4

4 に答える 4

2

少し面倒な解決策ですが、試すことができます:

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
于 2012-06-21T09:03:22.090 に答える
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;

デモ

また、別の列でエイリアス名を使用するもお読みください。これはあなたと同じ質問です。

于 2012-06-21T09:05:56.737 に答える
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') ;
于 2012-06-21T09:36:22.740 に答える
0

MySQL は REGEXP 抽出を行うことができません。これは本当に悲しいことです :(

値のパターンが次のようなものであると仮定すると、[A-Z]*[0-9]{2}-.*この醜いものを使用できます。

SELECT
    LEFT(
        SUBSTRING_INDEX("GSB45-B", "-", 1),
        LENGTH(SUBSTRING_INDEX("GSB45-B", "-", 1)) - 2
    ) as CODE;

しかし、アプリケーション側で解析を行うことをお勧めします:)

于 2012-06-21T09:03:15.163 に答える