需要计算今天日期与转换日期字段的日期差异

时间:2013-12-03 23:24:11

标签: sql sql-server-2012

我有一个表格,其中包含以前使用

转换的列
(CONVERT(VARCHAR(19), GETDATE(), 112)

getdate是插入字段的日期。现在我必须将当前日期与插入字段的日期进行比较。 我面临的问题是,当日期字段来自上个月,比如20131004,我通过(CONVERT(VARCHAR(19),GETDATE(),112) - 20131004计算日期差异,结果是200.显然这是错误... 你能告诉我如何计算真实的日期差异吗?

2 个答案:

答案 0 :(得分:3)

  1. 您应该使用该列的DATEDATETIME数据类型。你为什么要将日期存储为字符串?你知道你输了多少钱吗?验证,一个VARCHAR(19)列将接受20131004 12:34 PM,但也会接受诸如I am not a date!之类的无意义值。

  2. 如果数据实际上是好的,您只需执行此操作而不是懒惰的简写并且没有任何明确的转换:

    SELECT DATEDIFF(DAY, column_name, GETDATE()) FROM dbo.table;
    

    如果您收到错误消息,那么您的数据不正确。您可以这样识别它:

    SELECT column_name FROM dbo.table WHERE ISDATE(column_name) = 0;
    
  3. 请阅读:

答案 1 :(得分:1)

我同意@Aaron你应该在日期字段中存储日期字段,而不是文本字段。

如果由于某种原因您确实想将其存储在文本字段中,那么计算天数的最简单方法是将其转换回日期字段然后进行比较:

SELECT DATEDIFF(DAY, CAST(column_name as DATETIME), GETDATE()) FROM dbo.table

如果列中的值无法转换为日期,则会抛出错误。您还需要确保为数据库正确格式化日期。假设您使用格式112,您应该没问题,但如果您在列中的值为04/12/2013,则是2013年12月4日或2013年4月12日?这取决于数据库的配置方式。

但无论如何,如果你总是在该字段中插入日期,那么你就不会把它变成日期字段。

如果您需要在某处显示日期,请在出路时进行转换。