2

我有一个值是结合两个元素的列,就像“Class_Name”一样。例如,“Websites_Google”。但是由于一些历史原因,有一些特殊的值没有“Class_”前缀,比如“yahoo”。

现在我需要从列中提取类。如果没有 "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 回答