Sql 基于条件从列中提取子字符串
我在SQL server中有一个简单的表,如下所示: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 如
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