【发布时间】:2013-04-29 14:09:33
【问题描述】:
我有以下不同类型的输入nvarchar 值:
FirstName|LastNameFirstName|LastName
我需要在我的 SQL 脚本中将 FirstName 和 LastName 输出为单独的列。
SELECT FLname as Original
,SUBSTRING(FLname, 0, ISNULL(NULLIF(CHARINDEX('|', FLname),0), LEN(FLname)+1)) as FirstName
,SUBSTRING(FLname, ISNULL(NULLIF(CHARINDEX('|', FLname)+1,1), LEN(FLname)+1), LEN(FLname)+1) as LastName
这个逻辑确实有效,但我觉得它不可读,尤其是对于未来的开发者来说。
我知道我可以创建一个用户定义函数来存储这个逻辑,但我宁愿避免添加这个。
有没有更简洁的方法来实现作为内联 SQL 语句的预期结果?
【问题讨论】:
-
好吧,如果你担心有人不明白你的意思,总有 cmets :)
-
没有更易读的魔法内置函数,例如
SplitFirstAndLastNameByPipe()。如果未来的开发人员无法理解 SUBSTRING、CHARINDEX 等,那么也许他们不应该维护/修改此代码,或者您应该修复输入。 -
您可以随时创建函数:SplitFirstAndLastNameByPipe() 并将此代码放入其中。那么它是可重复使用的,它的目的是明确的
标签: sql sql-server sql-server-2008 tsql split