【问题标题】:Today minus 30 days今天减去 30 天
【发布时间】:2014-06-16 16:19:33
【问题描述】:

我需要在程序中运行查询/创建过滤器,每天 WHERE last_paid 是 TODAY - 30 和 TODAY = convert(varchar,getdate(),101)。最大的问题似乎是程序的不灵活性,今天除了convert(varchar,getdate(),101) 之外的任何东西。

【问题讨论】:

  • DATE_SUB(NOW(), INTERVAL 30 DAY); 告诉程序以适当的DateDateTime 格式保存日期。
  • 出于好奇,您使用的是哪个 DBMS(MySQL、PostgreSQL、Oracle、SQL Server 等)?
  • 你为什么要转换GETDATE()? TODAY 应存储为 DATE。程序的不灵活是什么意思?!您是指您的程序还是您指的是 DBMS?如果您是,您可能需要在发表此类声明之前查看DATEADD
  • SQL 是一种语言而不是数据库。
  • 您所说的“日期似乎没有存储为日期”是什么意思?你是从什么角度做出这个推断的?

标签: sql sql-server


【解决方案1】:

这将是一个简短的答案,因为这是一个非常简单的问题。你想使用DATEADD 你的语法应该是TODAY = convert(varchar,DATEADD(DAY,-30,getdate()),101)

更新:我仍然认为您需要解决将今天的生物存储为某种字符串的问题。如果这是 DATE 数据类型,您就不必处理这种转换废话了。

【讨论】:

  • 谢谢,谢谢!那里有许多“解决方案”,但没有一个将 varchar 混入其中。
【解决方案2】:

对于 Oracle 试试:

TRUNC(SYSDATE) - INTERVAL '30' days

【讨论】:

    【解决方案3】:

    我错过了什么吗?

    DECLARE @Today DATETIME
    
    SELECT @Today = GETDATE() - 30
    
    SELECT @Today AS [Today - 30]
    

    如果您不想要时间,请不要将其设为 DateTime 数据类型,而是使用 DATE:

    DECLARE @Today DATE
    
    SELECT @Today = GETDATE() - 30
    
    SELECT @Today AS [Today - 30]
    

    【讨论】:

    • 无法访问实际的 SQL 来查看(或编辑)。
    猜你喜欢
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多