TSQL - 在DateTime上检测空列条件,Calc 24差异

时间:2014-04-10 19:35:28

标签: sql sql-server

我在存储过程中有以下示例动态SQL,参数是链接服务器和我通过以下过程连接的数据库:

CREATE PROC [dbo].[DateTest] 
    @LINKED_SERVER_NAME nvarchar(max),
    @DATABASE_NAME nvarchar(max)
AS 
    SET NOCOUNT ON 
    SET XACT_ABORT ON 

BEGIN TRAN
DECLARE @SQL varchar(max)
SELECT @SQL = 'SELECT [TEST], [DATE_TIME_1], [DATE_TIME_2]  
FROM [' + @LINKED_SERVER_NAME + '].[' + @DATABASE_NAME + '].[dbo].[EXAMPLE_TABLE]'

EXEC (@SQL)
COMMIT

我正在尝试使用DATE_TIME_1值获取过去24小时的记录。将此添加到上面是没有问题的:

WHERE DATE_TIME_1 >= DateAdd(hh, -24, GETDATE())

但是,有时,我应该为此子句使用的日期是DATE_TIME_2。这种情况是DATE_TIME_1为NULL。

总之,如果DATE_TIME_1不为null,请查看它是否在过去24小时内发生。如果DATE_TIME_1为null,请使用DATE_TIME_2作为参数,以查看它是否在过去24小时内发生。我遇到的问题是我对如何在上面写入IF条件感到遗憾。

1 个答案:

答案 0 :(得分:1)

添加案例陈述:

....
WHERE case when DATE_TIME_1 is null then DATE_TIME_2 Else DATE_TIME_1 End >= DateAdd(hh, -24, GETDATE())

特定于SQL Server:

WHERE  IsNull(DATE_TIME_1, DATE_TIME_2)  >= DateAdd(hh, -24, GETDATE())