【发布时间】:2021-10-31 13:41:10
【问题描述】:
如下图所示, 我想将 SQL Server DeliverDay 列 '0;1;2;3;4' 更改为 'Monday;Tuesday;Wednesday;Thursday;Friday'。 但我不想把它写成硬代码,例如:
CASE WHEN deliverDay = '0' THEN 'Monday'
WHEN deliverDay = '0;1' THEN 'Monday;Tuesday'
WHEN deliverDay = '0;1;2' THEN 'Monday;Tuesday;Wednesday'
WHEN deliverDay = '0;1;2;3' THEN 'Monday;Tuesday;Wednesday;Thursday'
WHEN deliverDay = '0;1;2;3;4' THEN 'Monday;Tuesday;Wednesday;Thursday;Friday'
我想编写一个 SQL 来自动将字符串“0”更改为“Monday”,将“1”更改为“Tuesday”,这样当有一个 DeliverDay 列可能是 '0;3;6' 时,它可以自动将 DeliverDay 列设置为 'Monday;Thursday;Sunday'。
有什么解决办法吗?欣赏它。
【问题讨论】:
-
试试
replace()。不过,您总共需要嵌套七个调用。硬编码将涉及 128 个案例,我不记得 SQL Server 对其处理数量的限制。 -
参考这个db fiddle
-
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
-
使用
SELECT DATEPART(WEEKDAY, GETDATE())得到你想要的结果。 -
这不是一个好的设计。您应该有一个
DeliveryDays表,每个符合条件的日期都有一行,并且有一个指向现有表的外键。如果您想将日期连接成一个字符串以向用户显示数据,请将其作为查询处理,或者在表示层中更好地处理。
标签: sql sql-server tsql select case