我有一个由逗号分隔的 YYYYMM 格式字符串列表
('202001', '202003', '202012')
我想将其转换为表格中的每一行。
monthNumber
-----------
Month1
Month3
Month12
我知道如何处理一个字符串而不是一个列表。
select CONCAT('Month', (datepart(month,('200602')+'01'))) as monthNumber.
有什么方法可以将字符串列表转换为表格中的每一行?根据 @Gordon Linoff 评论,如果 SQL SERVER 不支持 WHERE IN
子句除外。 SQL Server 中有什么魔法可以将 WHERE IN
子句值转换为表中的每一行?
任何帮助将不胜感激。
答案 0 :(得分:1)
首先,您需要将该字符串“列表”转换为可用的内容。您如何执行此操作决定了源数据/“列表”的格式
最简单的方法之一:
SELECT *
FROM (
VALUES ('202001'), ('202003'), ('202012')
) AS monthInfo(strDate)
然后只获取月份数
select CONCAT('Month', (datepart(month,(mi.strDate)+'01'))) as monthNumber
from monthInfo mi
答案 1 :(得分:1)
第一步是以 SQL Server 识别的格式获取列表。作为单个字符串,该示例没有正确转义单引号。如果“列表”是一个带有转义单引号的字符串,那么你可以做这样的事情
declare @list_of_strings varchar(8000)='(''202001'', ''202003'', ''202012'')';
select concat('Month', cast(substring(ltrim(rtrim(sp.value)), 6, 2) as int)) monthNumber
from string_split(substring(@list_of_strings, 2, len(@list_of_strings)-2), ',') sp;
monthNumber
Month1
Month3
Month12