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

获取sql中由多个字符分隔的子字符串,sql,sql-server,Sql,Sql Server,首先,我知道这个问题的一个变体已经被问了很多次,但我在网上找不到以下问题的答案 我有一个名字表。有些名字是双管的,即玛丽·简、芭芭拉·安。我需要得到名字的子串,只提取名字的第一部分,即玛丽,芭芭拉 问题是,在表中,一些使用空格()拆分,一些使用破折号(-)拆分 这是我目前的查询: SELECT forename, LEFT(forename, charindex(' ', forename) - 0) changedName from student charindex的第一个参数可以是空格或

首先,我知道这个问题的一个变体已经被问了很多次,但我在网上找不到以下问题的答案

我有一个名字表。有些名字是双管的,即玛丽·简、芭芭拉·安。我需要得到名字的子串,只提取名字的第一部分,即玛丽,芭芭拉

问题是,在表中,一些使用空格()拆分,一些使用破折号(-)拆分

这是我目前的查询:

SELECT forename, LEFT(forename, charindex(' ', forename) - 0) changedName
from student
charindex的第一个参数可以是空格或破折号,两者都可以,但我需要一种运行查询的方法来删除破折号和空格

所有名称必须在一列中

使用MSSQLS2014


这样做的最佳方法是什么?

这里有一个简单的方法:

SELECT forename,
       LEFT(forename, patindex('%[ -]%', forename) - 1) as changedName
FROM student;
如果有些学生只有一个名字(两个字符都没有),您可以:

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