【问题标题】:SQL Server 2005 - DATE ADD AND GETDATE DOESN'T WORKSQL Server 2005 - 日期添加和获取日期不起作用
【发布时间】:2016-12-11 19:10:58
【问题描述】:

我在 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

在日期 DATASCADENZA 在 where 条件下,如果我将今天的日期设置为“2016-08-05”,我会得到结果.. 而如果我使用 GETDATE()DATEADD(DAY, 3, GETDATE()) 我没有得到任何结果......我不明白为什么。

你能帮帮我吗?谢谢!

【问题讨论】:

  • 你看过GETDATE返回什么吗?

标签: sql-server tsql sql-server-2005


【解决方案1】:

GETDATE() 返回日期的时间部分。在 SQL Server 2005 中,您可以通过以下方式删除时间组件:

DATASCADENZA = DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

您可以将三天添加为:

DATASCADENZA = DATEADD(day, 3 + DATEDIFF(day, 0, GETDATE()), 0)

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

DATASCADENZA = CAST(GETDATE() as DATE)

我更喜欢这种表述,而不是在某个神秘的“0”日期上添加天数。

【讨论】:

    猜你喜欢
    • 2010-09-15
    • 2014-08-29
    • 1970-01-01
    • 2010-12-19
    • 2012-07-22
    • 2010-11-12
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    相关资源
    最近更新 更多