Sql 基于条件从列中提取子字符串

Sql 基于条件从列中提取子字符串,sql,sql-server,string,csv,Sql,Sql Server,String,Csv,我在SQL server中有一个简单的表,如下所示: ID NAMES 1 John;Betty;Dave;Bob 2 Mary;Raul;Felix 我希望提取由“;”分隔的“First”字符串从“名称”列中。输出应该是 ID Names 1 John 2 Mary 您可以使用字符串函数: select t.*, left(names, charindex(';', names) - 1) as first_name from mytable t 如

我在SQL server中有一个简单的表,如下所示:

ID    NAMES

1     John;Betty;Dave;Bob

2     Mary;Raul;Felix
我希望提取由“;”分隔的“First”字符串从“名称”列中。输出应该是

ID  Names

1   John
2   Mary

您可以使用字符串函数:

select t.*, left(names, charindex(';', names) - 1) as first_name
from mytable t
如果要在没有嵌入的
“;”的情况下返回整个字符串,然后:

select t.*, left(names, charindex(';', names + ';') - 1) as first_name
from mytable t

select t.*, left(names, charindex(';', names + ';') - 1) as first_name
from (values 
    (1, 'John;Betty;Dave;Bob'), 
    (2, 'Mary;Raul;Felix'), 
    (3, 'foo')
) t(id, names)
id |姓名|名字| -: | :------------------ | :--------- 1 |约翰;贝蒂;戴夫;鲍勃·约翰 2 |玛丽;劳尔;费利克斯·玛丽 3 |福|福
你试过什么?你在哪里卡住了?向我们展示您的尝试。永远不要将数据存储为;分开的项目。这只会给你带来很多麻烦。我会添加一个故障保护。。。以防万一eft(名称,charindex(“;”,名称+“;”)-1)@johncapelletti:我实际上是在测试。。。提出了和你一样的解决方案,只是更新了答案。 id | names | first_name -: | :------------------ | :--------- 1 | John;Betty;Dave;Bob | John 2 | Mary;Raul;Felix | Mary 3 | foo | foo