我有一个关于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
但我并没有得到预期的结果。
相反,我得到了一个错误:
消息537,级别16,状态2,第3行
传递给LEFT或SUBSTRING函数的长度参数无效。
请告诉我如何解决这个问题
在SQL Server中使用查询时出现问题
5条答案
按热度按时间rks48beu1#
请尝试以下操作:
您可以使用CASE命令来控制姓氏是否可用。
SQL小提琴
MS SQL Server 2008架构安装程序:
查询1:
结果:
已更新:添加了sqlfiddle
byqmnocz2#
polkgigr3#
你错过了字符串中没有下划线的情况,这会导致错误。
我假设在一个单词的情况下,您希望将它们同时显示为名字和姓氏。您可以将该值更改为任何您喜欢的值。
xsuvu9jc4#
juzqafwq5#
使用Split_string函数和动态透视表更容易
将@ TestPerformance声明为表(DirtyId整数标识,[文本] varchar(最大值))
插入到@测试性能([文本])值(“佩德罗·格瓦拉,58岁,牙买加”)插入到@测试性能([文本])值(“胡安·桑多瓦尔,80岁,大肠杆菌”)插入到@测试性能([文本])值(“卡拉·希诺霍萨,71岁,牙买加”)插入到@测试性能([文本])值(“路易斯·冈萨雷斯,15岁,牙买加”)
select [2] AS [Id],[1] AS [Name],[3] AS [State] from(select TP.DirtyId,ROW_NUMBER()OVER(ORDER BY TP.DirtyId)-((TP.DirtyId -1)* 3)AS行_Csc_Id,txt.值from @TestPorformance TP交叉应用字符串拆分(tp.[Text],',')AS Txt)X透视(([1],[2],[3])中行_Csc_Id的最小值([value])))p