gpt4 book ai didi

sql-server - 如何在SQL Server中将一列拆分为两列

转载 作者:行者123 更新时间:2023-12-02 11:51:53 25 4
gpt4 key购买 nike

我有关于 SQL Server 的小问题,请告诉我如何解决这个问题

表:emp

   id    name
---------------
1 abc_rao
2 nani
3 hari_babu
4 kalibabu
5 ab_tan

根据该表,我想要如下输出

   id   firstname   lastname
1 abc rao
2 nani nothing
3 hari babu
4 kalibabu nothing
5 ab tan

我尝试过这样的:

select 
SUBSTRING(name, 1, CHARINDEX('_', name) - 1) as firstname ,
SUBSTRING(name, CHARINDEX('_', name) + 1, LEN(name)) as lastname
from emp

但我没有得到完全预期的结果。

相反,我收到错误:

Msg 537, Level 16, State 2, Line 3
Invalid length parameter passed to the LEFT or SUBSTRING function.

请告诉我如何解决这个问题

在 SQL Server 中使用查询时出现问题

最佳答案

试试这个:

select 
case when CHARINDEX('_',name)>0
then SUBSTRING(name,1,CHARINDEX('_',name)-1)
else name end firstname,
CASE WHEN CHARINDEX('_',name)>0
THEN SUBSTRING(name,CHARINDEX('_',name)+1,len(name))
ELSE NULL END as lastname
from emp

您可以使用CASE命令来控制姓氏是否可用。

SQL Fiddle

MS SQL Server 2008 架构设置:

查询 1:

declare @t table (id int, name  varchar(50))

insert into @t (id,name) values( 1 ,'abc_rao')
insert into @t (id,name) values( 2 ,'nani')
insert into @t (id,name) values( 3 ,'hari_babu')
insert into @t (id,name) values( 4 ,'kalibabu')
insert into @t (id,name) values( 5 ,'ab_tan')

select
case when CHARINDEX('_',name)>0
then SUBSTRING(name,1,CHARINDEX('_',name)-1)
else name end firstname,
CASE WHEN CHARINDEX('_',name)>0
THEN SUBSTRING(name,CHARINDEX('_',name)+1,len(name))
ELSE NULL END as lastname
from @t

<强> Results :

| FIRSTNAME | LASTNAME |
|-----------|----------|
| abc | rao |
| nani | (null) |
| hari | babu |
| kalibabu | (null) |
| ab | tan |

更新:添加了 sqlfiddle

关于sql-server - 如何在SQL Server中将一列拆分为两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22652225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com