Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从sql中YYYYMM格式的字符串列表中获取月份?_Sql_Sql Server - Fatal编程技术网

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

如何从sql中YYYYMM格式的字符串列表中获取月份?,sql,sql-server,Sql,Sql Server,我有一个由逗号分隔的YYYYMM格式的字符串列表 ('202001', '202003', '202012') 我想将其转换为表中的每一行 monthNumber ----------- Month1 Month3 Month12 我知道如何处理一个字符串,而不是一个列表 select CONCAT('Month', (datepart(month,('200602')+'01'))) as monthNumber. 更新问题: 有没有办法将字符串列表转换为表中的每一行?根据@Gordon

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

首先,您需要将字符串列表转换为可用的内容。如何执行此操作取决于源数据/列表的格式

最简单的方法之一:

SELECT *
FROM (
     VALUES ('202001'), ('202003'), ('202012')
) AS monthInfo(strDate)
然后就可以拿到月号了

select CONCAT('Month', (datepart(month,(mi.strDate)+'01'))) as monthNumber
from monthInfo mi

首先,您需要将字符串列表转换为可用的内容。如何执行此操作取决于源数据/列表的格式

最简单的方法之一:

SELECT *
FROM (
     VALUES ('202001'), ('202003'), ('202012')
) AS monthInfo(strDate)
然后就可以拿到月号了

select CONCAT('Month', (datepart(month,(mi.strDate)+'01'))) as monthNumber
from monthInfo mi

第一步是以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;

第一步是以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;

SQL Server不支持任何称为“列表井”的操作,除了IN运算符。您的问题不清楚。在提问时,您需要提供一个最小的可复制示例。请参考以下链接:请提供以下内容:1 DDL和示例数据填充,即创建表和插入T-SQL语句。2您需要做什么,即逻辑和代码尝试在T-SQL中实现它。3期望输出,基于上述1中的样本数据。4您的SQL Server版本选择@@version;自7年以来,对sql server的每个版本都详细讨论了字符串拆分问题。搜索将找到许多示例-选择一个。然后,您需要逻辑将当前格式转换为所需格式。您似乎可以控制这种格式,但请注意,所需的Month1值对于理解您的目标并不特别有用。我们可以猜测,但我们不需要。SQL Server不支持任何称为列表的东西,除了IN操作符。您的问题不清楚。在提问时,您需要提供一个最小的可复制示例。请参考以下链接:请提供以下内容:1 DDL和示例数据填充,即创建表和插入T-SQL语句。2您需要做什么,即逻辑和代码尝试在T-SQL中实现它。3期望输出,基于上述1中的样本数据。4您的SQL Server版本选择@@version;自7年以来,对sql server的每个版本都详细讨论了字符串拆分问题。搜索将找到许多示例-选择一个。然后,您需要逻辑将当前格式转换为所需格式。您似乎可以控制这种格式,但请注意,所需的Month1值对于理解您的目标并不特别有用。我们可以猜测-但我们不需要。嗨,我得到了'修剪'不是一个公认的内置函数名。errorIt于2017年添加。在使用这两个函数之前,您确实将列表设置为一个字符串,然后将其转换为每一行。谢谢,我得到的“trim”不是公认的内置函数名。errorIt于2017年添加。在使用这两个函数之前,您确实将列表设置为一个字符串,然后将其转换为每一行。谢谢