首先,我知道这个问题的变体已被多次询问,但我在网上找不到任何答案。
我有一张姓名表。有些名字是双管,即Mary-Jane,Barbara Ann。我需要获取名称的子串,只提取名称的第一部分,即Mary,Barbara。
问题在于,在表中,一些使用空格()分割,一些使用短划线( - )分割。
这是我目前的查询:
SELECT forename, LEFT(forename, charindex(' ', forename) - 0) changedName
from student
charindex的第一个参数可以是空格或短划线,两者都可以正常工作但我需要一种方法来运行查询,删除短划线和空格。
所有名称必须在一列中。
使用MSSQLS 2014。
这样做的最佳途径是什么?
答案 0 :(得分:3)
这是一个简单的方法:
SELECT forename,
LEFT(forename, patindex('%[ -]%', forename) - 1) as changedName
FROM student;
如果有些学生有单个姓名(两个字符都没有),你可以这样做:
SELECT forename,
LEFT(forename, patindex('%[ -]%', forename + '-') - 1) as changedName
FROM student;