如何从sql中YYYYMM格式的字符串列表中获取月份?

时间:2021-02-05 16:49:45

标签: sql sql-server

我有一个由逗号分隔的 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 子句值转换为表中的每一行? 任何帮助将不胜感激。

2 个答案:

答案 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