2

たとえば、「Websites_Google」のように、値が 2 つの要素を組み合わせた列があります。

ここで、列からクラスを抽出する必要があります。「class_」接頭辞がない場合、「」が返されることを期待しています。私はちょうどこのようなSUBSTRING_INDEX関数を試してみてください:

select SUBSTRING_INDEX(column1, '_', 1) .......

値に「class_」がある場合は非常にうまく機能しますが、「class_」がない場合は、必要な空の文字列ではなく、値全体が返され、「yahoo」は「yahoo」が返されます。

それを解決する方法は?

4

3 に答える 3

2

下記内容をご確認の上、

select case when CHARINDEX ('_', column1)>0 then SUBSTRING_INDEX(column1, '_', 1) else '' end .....
于 2012-04-20T03:54:46.600 に答える
1

IF アンダースコアがあるかどうかを確認するために使用できます。

select if(locate('_',column1)=0,'',SUBSTRING_INDEX(column1, '_', 1))
from mytable
于 2012-04-20T03:58:07.173 に答える
0

mysql 関数を作成する必要があります。これが実際の例です:

DELIMITER $$

DROP FUNCTION IF EXISTS `test`.`split_class` $$
CREATE FUNCTION `test`.`split_class` (`class` varchar(25)) RETURNS varchar(25)
BEGIN

DECLARE `tmp1` varchar(25);
DECLARE `tmp2` varchar(25);
DECLARE `ret` varchar(25);

  set `tmp1` = SUBSTRING_INDEX(`class`, '_', 1);
  set `tmp2` = SUBSTRING_INDEX(`class`, '_', -1);
  set `ret` = '';

  IF `tmp1` != `tmp2`
    then set `ret` = `tmp1`;
  END IF;

  RETURN `ret`;
END $$

DELIMITER ;

次に、選択してみてください

SELECT split_class(last) FROM test.`table` t;
于 2012-04-20T04:47:28.763 に答える