获取由sql中的多个字符分隔的子字符串

时间:2018-05-15 11:50:21

标签: sql sql-server

首先,我知道这个问题的变体已被多次询问,但我在网上找不到任何答案。

我有一张姓名表。有些名字是双管,即Mary-Jane,Barbara Ann。我需要获取名称的子串,只提取名称的第一部分,即Mary,Barbara。

问题在于,在表中,一些使用空格()分割,一些使用短划线( - )分割。

这是我目前的查询:

SELECT forename, LEFT(forename, charindex(' ', forename) - 0) changedName
from student

charindex的第一个参数可以是空格或短划线,两者都可以正常工作但我需要一种方法来运行查询,删除短划线空格。

所有名称必须在一列中。

使用MSSQLS 2014。

这样做的最佳途径是什么?

1 个答案:

答案 0 :(得分:3)

这是一个简单的方法:

SELECT forename,
       LEFT(forename, patindex('%[ -]%', forename) - 1) as changedName
FROM student;

如果有些学生有单个姓名(两个字符都没有),你可以这样做:

SELECT forename,
       LEFT(forename, patindex('%[ -]%', forename + '-') - 1) as changedName
FROM student;