SQL Server 2005 - 日期添加和GETDATE不起作用

Big*_*ack 1 t-sql sql-server sql-server-2005

我在SQL查询中有一个非常奇怪的错误,我不明白为什么.

SELECT 
    CODCLIFOR, '', 
    DSCCONTO1, '',  
    NUMDOC, '', 
    NUMSCAD, '', 
    DATASCADENZA, '', 
    REPLACE(CONVERT(varchar, CAST(IMPORTOSCLIT AS money), 105),',','.') , '', 
    BANCAAPPCF.BANCAAPPOGGIO, '',
    TIPIEFFETTI.DESCRIZIONE
FROM 
    dbo.TABSCADENZE
INNER JOIN 
    dbo.ANAGRAFICACF ON CODCLIFOR = CODCONTO
INNER JOIN 
    dbo.TIPIEFFETTI ON TIPOEFFETTO = EFFETTO
LEFT JOIN 
    dbo.BANCAAPPCF ON CODCLIFOR = BANCAAPPCF.CODCONTO AND BANCAAPPCF.CODICE = TABSCADENZE.BANCAAPPOGGIO
WHERE    
    TIPOEFFETTO = 2  
    AND DATASCADENZA ='2016-08-05' 
    AND CODCLIFOR LIKE '%C%'
ORDER BY 
    BANCAAPPCF.BANCAAPPOGGIO DESC
Run Code Online (Sandbox Code Playgroud)

DATASCADENZAwhere条件的日期,如果我把今天的日期像'2016-08-05'我得到结果..相反,如果我使用GETDATE()DATEADD(DAY, 3, GETDATE())我没有得到结果...我不明白为什么.

你能帮助我吗?谢谢!

Gor*_*off 7

GETDATE()返回日期的时间组件.在SQL Server 2005中,您可以通过执行以下操作来删除时间组件:

DATASCADENZA = DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
Run Code Online (Sandbox Code Playgroud)

您可以添加三天:

DATASCADENZA = DATEADD(day, 3 + DATEDIFF(day, 0, GETDATE()), 0)
Run Code Online (Sandbox Code Playgroud)

从SQL Server 2008开始,您只需转换为DATE数据类型:

DATASCADENZA = CAST(GETDATE() as DATE)
Run Code Online (Sandbox Code Playgroud)

我更喜欢这个配方,为一些神秘的"0"日期添加天.