作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有下面的代码,它返回邮政编码的访问顺序。我能够正确返回邮政编码,但为了使数据更加用户友好,我在邮政编码之间添加了破折号(-)。
问题来自于这样一个事实:我无法弄清楚如何消除只有 2 或 3 个邮政编码的行的破折号。
SELECT
[Qry_Zip Stop Sequence].[Load ID],
[1] AS [Stop 1], [2] AS [Stop 2], [3] AS [Stop 3],
[4] AS [Stop 4],
TMS_Load.[Shipped Date/Time],
CONCAT(ISNULL([1], ''), '-', ISNULL([2], ''), '-', ISNULL([3], ''), '-', ISNULL([4], '')) AS [Zip to Zip w Stops]
FROM
(SELECT
[Load ID], [Sequence], [Stop Zip]
FROM
TMS_Load_Stops) ls
PIVOT
(MIN([Stop Zip])
FOR [Sequence] IN ([1], [2], [3], [4])) AS [Qry_Zip Stop Sequence]
INNER JOIN
[TMS_Load] ON [TMS_Load].[Load ID] = [Qry_Zip Stop Sequence].[Load ID];
我希望结果仅显示有效邮政编码之间的破折号。
78052-45050-45201 or
73350-45220 or
84009-48009-14452 or
36521-38222-87745-95123 or
73368 or
12789-35789
最佳答案
在每个值前面加上破折号,并使用 stuff()
删除结果字符串中的第一个破折号(不一定是第一个值中的破折号)。
stuff(concat('-' + [1],
'-' + [2],
'-' + [3],
'-' + [4]),
1,
1,
'')
注意:我在这里故意混合了 +
和 concat()
来进行字符串连接。当值为 NULL
但 concat()
处理 NULL
时,+
结果为 NULL
就像空字符串一样。这样我们就不需要使用大量的coalesce()或isnull()等。
关于SQL IF 语句使用多个 ISNULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54153603/
我是一名优秀的程序员,十分优秀!