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”。可能是重复的