【发布时间】:2014-03-26 05:28:49
【问题描述】:
我有一个关于 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 中使用查询的问题
【问题讨论】:
-
如果您此时可以更改设计,那么我建议您这样做。将名称保存到两个字段中。这是一个更好的设计。
-
你绝对会得到预期的结果——你只是从来没有真正把注意力放在你写的东西上。看,对于 nani (id 2) 没有 _,因此 charindex 将返回 NULL,这不是子字符串的有效输入(因此您需要在那里合并将其转换为数字)。然后在您的 putpu 中,“无”究竟来自哪里?
标签: sql-server sql-server-2012