【问题标题】:How to subtract 30 days from the current date using SQL Server如何使用 SQL Server 从当前日期减去 30 天
【发布时间】:2014-12-02 11:01:19
【问题描述】:

我无法从当前日期减去 30 天,而且我是 SQL Server 的新手。

这是我专栏中的数据

date 
------------------------------
Fri, 14 Nov 2014 23:03:35 GMT
Mon, 03 Nov 2014 15:18:00 GMT
Tue, 11 Nov 2014 01:24:47 GMT
Thu, 06 Nov 2014 19:13:47 GMT
Tue, 04 Nov 2014 12:37:06 GMT
Fri, 1 Nov 2014 00:33:00 GMT
Sat, 5 Nov 2014 01:06:00 GMT
Sun, 16 Nov 2014 06:37:12 GMT

为了创建上面的列,我使用了varchar(50),现在我的问题是我想从日期列中显示过去 15-20 天的日期,有人可以帮助解决这个问题吗? 更新 [如何按顺序显示最近 7 天的日期

【问题讨论】:

  • Bad habits to kick : choosing the wrong data type - 你应该始终使用最合适的数据类型 - 毕竟这就是它们的用途!如果您想存储日期,请使用 DATEDATETIME2(n) - 但绝对不是 varchar 列!
  • 嘿,这个信息真的很有用,我正在更新我的专栏

标签: sql sql-server sql-server-2008 sql-server-2012


【解决方案1】:

您可以将其转换为datetime,然后使用DATEADD(DAY, -30, date)

here

编辑

我怀疑很多人发现这个问题是因为他们想从当前日期中减去(就像问题的标题一样,但不是 OP 的意图)。下面 munyul 的评论更具体地回答了这个问题。由于 cmets 被认为是虚无缥缈的(可能在任何给定点被删除),我将在这里重复一遍:

DATEADD(DAY, -30, GETDATE())

【讨论】:

  • 简单而精彩!
  • 对于任何想知道的人,您可以将方法中的 DAY 与 MONTH 交换,以对一个月差异执行相同的操作。我想任何有效的日期时间值都会起作用。
【解决方案2】:

试试这个:

SELECT      GETDATE(), 'Today'
UNION ALL
SELECT      DATEADD(DAY,  10, GETDATE()), '10 Days Later'
UNION ALL
SELECT      DATEADD(DAY, –10, GETDATE()), '10 Days Earlier'
UNION ALL
SELECT      DATEADD(MONTH,  1, GETDATE()), 'Next Month'
UNION ALL
SELECT      DATEADD(MONTH, –1, GETDATE()), 'Previous Month'
UNION ALL
SELECT      DATEADD(YEAR,  1, GETDATE()), 'Next Year'
UNION ALL
SELECT      DATEADD(YEAR, –1, GETDATE()), 'Previous Year'

结果集:

———————– —————
2011-05-20 21:11:42.390 Today
2011-05-30 21:11:42.390 10 Days Later
2011-05-10 21:11:42.390 10 Days Earlier
2011-06-20 21:11:42.390 Next Month
2011-04-20 21:11:42.390 Previous Month
2012-05-20 21:11:42.390 Next Year
2010-05-20 21:11:42.390 Previous Year

【讨论】:

    【解决方案3】:

    试试这个:

    将您的 VARCHAR 值转换为 DATETIME 并添加 -30 以进行减法。此外,在 sql-server 中,格式 Fri, 14 Nov 2014 23:03:35 GMT 未转换为 DATETIME。尝试子字符串:

    SELECT DATEADD(dd, -30, 
           CAST(SUBSTRING ('Fri, 14 Nov 2014 23:03:35 GMT', 6, 21) 
           AS DATETIME))
    

    【讨论】:

      【解决方案4】:
      SELECT DATEADD(day,-30,date) AS before30d 
      FROM...
      

      但强烈建议将日期保留在 datetime 列中,而不是 varchar。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-04
        • 2012-06-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多