Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 获取动态上个月的结束日期并插入到_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 获取动态上个月的结束日期并插入到

Sql server 获取动态上个月的结束日期并插入到,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我试图动态获取上个月的最后一天,并将其传递到查询中。我试过下面的主意,但没用 DECLARE @PrevMonthLastDay DATE=(SELECT CONVERT(CHAR(15),DATEADD(DD,-Day(GETDATE()),GETDATE()),106)) --PRINT @PrevMonthLastDay INSERT INTO [TBL_ParseRawDataHist] SELECT [SrcID],[ASOFDATE], dbo.SplitI

我试图动态获取上个月的最后一天,并将其传递到查询中。我试过下面的主意,但没用

DECLARE @PrevMonthLastDay DATE=(SELECT CONVERT(CHAR(15),DATEADD(DD,-Day(GETDATE()),GETDATE()),106))
--PRINT @PrevMonthLastDay
INSERT INTO [TBL_ParseRawDataHist]  
SELECT   [SrcID],[ASOFDATE],
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 1) AS Parse1, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 2) AS Parse2,
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 3) AS Parse3, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 4) AS Parse4, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 5) AS Parse5, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 6) AS Parse6, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 7) AS Parse7, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 8) AS Parse8,
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 9) AS Parse9, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 10) AS Parse10          
FROM     TBL_FR2052A_RAW_DATA_HIST  
--WHERE  ASOFDATE = '02/28/2018'
WHERE    ASOFDATE = ''' + CAST(@PrevMonthLastDay AS varchar(15)) + '''
结果:从字符串转换日期和/或时间时转换失败


我做错了什么?我正在使用SQL Server 2008

您不需要转换为字符串,只需使用
dateadd
day

DECLARE @CurrentDate as date = GETDATE()

SELECT  @CurrentDate As CurrentDate, 
        DATEADD(DAY, -DAY(@CurrentDate), @CurrentDate) As EndOfLastMonth
结果:

CurrentDate     EndOfLastMonth
06.03.2018      28.02.2018
2012版引入了内置函数,因此如果您升级SQL Server,您可以这样做以获得相同的结果:
选择EOMOUNT(dateadd(month,-1,getdate())

更新
以下是完整的insert语句:

DECLARE @CurrentDate as date = GETDATE()

INSERT INTO [TBL_ParseRawDataHist]  
SELECT   [SrcID],[ASOFDATE],
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 1) AS Parse1, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 2) AS Parse2,
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 3) AS Parse3, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 4) AS Parse4, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 5) AS Parse5, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 6) AS Parse6, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 7) AS Parse7, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 8) AS Parse8,
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 9) AS Parse9, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 10) AS Parse10          
FROM     TBL_FR2052A_RAW_DATA_HIST  
WHERE    ASOFDATE = DATEADD(DAY, -DAY(@CurrentDate), @CurrentDate)

每月的第一天和最后一天:

DECLARE @PrevMonthFirstDay DATE= DATEADD(month, DATEDIFF(month, 0, getdate()), 0)

DECLARE @PrevMonthLastDay DATE= DATEADD(dd, -1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0))

不能将字符串与日期连接起来,必须将两者转换为字符串:

WHERE    ASOFDATE = ''' + CAST(@PrevMonthLastDay AS varchar(15)) + ''''

Zohar,你更新的代码给了我一个尝试的想法。最终,这对我起了作用

DECLARE @PrevMonthLastDay DATE=(SELECT CONVERT(CHAR(15),DATEADD(DD,-Day(GETDATE()),GETDATE()),106))
Print @PrevMonthLastDay

INSERT   INTO [TBL_ParseRawDataHist]  
SELECT   [SrcID],[ASOFDATE],
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 1) AS Parse1, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 2) AS Parse2,
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 3) AS Parse3, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 4) AS Parse4, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 5) AS Parse5, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 6) AS Parse6, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 7) AS Parse7, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 8) AS Parse8,
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 9) AS Parse9, 
         dbo.SplitIndex('|', LTRIM(RTRIM([SrcID])), 10) AS Parse10          
FROM     TBL_FR2052A_RAW_DATA_HIST  
WHERE    ASOFDATE = @PrevMonthLastDay 

谢谢

谢谢。如何将其传递到INSERT into查询中?我试过你的建议,但什么也没发生。有些事情还是不太对劲。我刚刚更新了我原来的帖子。这就是我现在所在的地方。还有什么问题吗?我确信这是可行的。
ASOFDATE
列的数据类型是什么?@Zohar,数据类型是“Date”。可能是重复的