Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 server 未来12个月的日期格式查询_Sql Server_Date Format - Fatal编程技术网

Sql server 未来12个月的日期格式查询

Sql server 未来12个月的日期格式查询,sql-server,date-format,Sql Server,Date Format,我正在尝试查询日期格式YYYYMM。我现在的问题是这个 declare @M0 nvarchar(6);set @M0=(SELECT CONVERT(nvarchar(6), GETDATE(), 112)) declare @M1 nvarchar(6);set @M1=@M0+1; declare @M2 nvarchar(6);set @M2=@M1+1; declare @M3 nvarchar(6);set @M3=@M2+1; declare @M4 nvarchar(6);set

我正在尝试查询日期格式YYYYMM。我现在的问题是这个

declare @M0 nvarchar(6);set @M0=(SELECT CONVERT(nvarchar(6), GETDATE(), 112))
declare @M1 nvarchar(6);set @M1=@M0+1;
declare @M2 nvarchar(6);set @M2=@M1+1;
declare @M3 nvarchar(6);set @M3=@M2+1;
declare @M4 nvarchar(6);set @M4=@M3+1;
declare @M5 nvarchar(6);set @M5=@M4+1;
declare @M6 nvarchar(6);set @M6=@M5+1;
declare @M7 nvarchar(6);set @M7=@M6+1;
declare @M8 nvarchar(6);set @M8=@M7+1;
declare @M9 nvarchar(6);set @M9=@M8+1;
declare @M10 nvarchar(6);set @M10=@M9+1;
declare @M11 nvarchar(6);set @M11=@M10+1;
declare @M12 nvarchar(6);set @M12=@M11+1;
select @M0,@M1,@M2,@M3,@M4,@M5,@M6,@M7,@M8,@M9,@M10,@M11,@M12
我想得到的是从当前日期到未来12个月的YYYYMM日期格式。但我目前的查询是:201705201706,…201711201712201713201714,等等。现在你可能已经知道我想要的是:201705201706,…201711201712201801201802,等等

我搜索了几乎所有的网页,但没有找到答案。所以我来到这里,希望有人能帮助我


提前谢谢

您可以使用SQL Server的DATEADD,它将处理滚动到下一年并重置回1月份的问题,然后将其转换为YYYYMM格式,如下所示:

DECLARE @M0 NVARCHAR(6)  = CONVERT( NVARCHAR(6), GETDATE(), 112 );
DECLARE @M1 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 1, GETDATE() ), 112 );
DECLARE @M2 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 2, GETDATE() ), 112 );
DECLARE @M3 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 3, GETDATE() ), 112 );
DECLARE @M4 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 4, GETDATE() ), 112 );
DECLARE @M5 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 5, GETDATE() ), 112 );
DECLARE @M6 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 6, GETDATE() ), 112 );
DECLARE @M7 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 7, GETDATE() ), 112 );
DECLARE @M8 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 8, GETDATE() ), 112 );
DECLARE @M9 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 9, GETDATE() ), 112 );
DECLARE @M10 NVARCHAR(6) = CONVERT( NVARCHAR(6), DATEADD( MONTH, 10, GETDATE() ), 112 );
DECLARE @M11 NVARCHAR(6) = CONVERT( NVARCHAR(6), DATEADD( MONTH, 11, GETDATE() ), 112 );
DECLARE @M12 NVARCHAR(6) = CONVERT( NVARCHAR(6), DATEADD( MONTH, 12, GETDATE() ), 112 );
SELECT @M0, @M1, @M2, @M3, @M4, @M5, @M6, @M7, @M8, @M9, @M10, @M11, @M12
输出为:

+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
| 201705 | 201706 | 201707 | 201708 | 201709 | 201710 | 201711 | 201712 | 201801 | 201802 | 201803 | 201804 | 201805 |
+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+

您可以使用SQL Server的DATEADD,它将处理滚动到下一年并重置回1月份的问题,然后将其转换为YYYYMM格式,如下所示:

DECLARE @M0 NVARCHAR(6)  = CONVERT( NVARCHAR(6), GETDATE(), 112 );
DECLARE @M1 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 1, GETDATE() ), 112 );
DECLARE @M2 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 2, GETDATE() ), 112 );
DECLARE @M3 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 3, GETDATE() ), 112 );
DECLARE @M4 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 4, GETDATE() ), 112 );
DECLARE @M5 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 5, GETDATE() ), 112 );
DECLARE @M6 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 6, GETDATE() ), 112 );
DECLARE @M7 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 7, GETDATE() ), 112 );
DECLARE @M8 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 8, GETDATE() ), 112 );
DECLARE @M9 NVARCHAR(6)  = CONVERT( NVARCHAR(6), DATEADD( MONTH, 9, GETDATE() ), 112 );
DECLARE @M10 NVARCHAR(6) = CONVERT( NVARCHAR(6), DATEADD( MONTH, 10, GETDATE() ), 112 );
DECLARE @M11 NVARCHAR(6) = CONVERT( NVARCHAR(6), DATEADD( MONTH, 11, GETDATE() ), 112 );
DECLARE @M12 NVARCHAR(6) = CONVERT( NVARCHAR(6), DATEADD( MONTH, 12, GETDATE() ), 112 );
SELECT @M0, @M1, @M2, @M3, @M4, @M5, @M6, @M7, @M8, @M9, @M10, @M11, @M12
输出为:

+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
| 201705 | 201706 | 201707 | 201708 | 201709 | 201710 | 201711 | 201712 | 201801 | 201802 | 201803 | 201804 | 201805 |
+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+

方便的小片段,因为我永远记不起代码

        WITH lv0 AS (SELECT 0 g UNION ALL SELECT 0)
            ,lv1 AS (SELECT 0 g FROM lv0 a CROSS JOIN lv0 b) -- 4
            ,lv2 AS (SELECT 0 g FROM lv1 a CROSS JOIN lv1 b) -- 16
            ,lv3 AS (SELECT 0 g FROM lv2 a CROSS JOIN lv2 b) -- 256
            ,Tally (n) AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM lv3)
        SELECT  CAST( n AS VARCHAR(MAX)) + ' - ' +  CONVERT(VARCHAR(MAX),GETDATE(), n) xZample
        , 'CONVERT(VARCHAR(MAX),@MindIfWeDanceWitYoDates, '+CAST(n AS VARCHAR(25))+')' AS  _________________________tehcode____________________________
        FROM Tally
        WHERE (n< 200) AND (n%100 IN (0,20,21,120,121,126,127,130,131) OR n%100 <= 14)
        ORDER BY n;

方便的小片段,因为我永远记不起代码

        WITH lv0 AS (SELECT 0 g UNION ALL SELECT 0)
            ,lv1 AS (SELECT 0 g FROM lv0 a CROSS JOIN lv0 b) -- 4
            ,lv2 AS (SELECT 0 g FROM lv1 a CROSS JOIN lv1 b) -- 16
            ,lv3 AS (SELECT 0 g FROM lv2 a CROSS JOIN lv2 b) -- 256
            ,Tally (n) AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM lv3)
        SELECT  CAST( n AS VARCHAR(MAX)) + ' - ' +  CONVERT(VARCHAR(MAX),GETDATE(), n) xZample
        , 'CONVERT(VARCHAR(MAX),@MindIfWeDanceWitYoDates, '+CAST(n AS VARCHAR(25))+')' AS  _________________________tehcode____________________________
        FROM Tally
        WHERE (n< 200) AND (n%100 IN (0,20,21,120,121,126,127,130,131) OR n%100 <= 14)
        ORDER BY n;

不客气!如果你觉得答案解决了你的问题,请接受:不客气!如果您认为答案解决了您的问题,请接受: