如何在SQL Server中对2个字符串使用DATEDIFF?

如何在SQL Server中对2个字符串使用DATEDIFF?,sql,sql-server-2008,Sql,Sql Server 2008,我在一个数据类型为varchar的表中有2列。但我将这些值存储为日期,如2016年10月14日。现在我需要找到这两列的月份差异。我无法为此使用DATEDIFF,因为列被声明为varchar。有没有办法找到差异?使用转换方法并计算差异: SELECT DATEDIFF(DAY,CONVERT(DATETIME,'14/10/2016',103),CONVERT(DATETIME,'15/10/2016',103)) 使用转换方法并计算差异: SELECT DATEDIFF(DAY,CON

我在一个数据类型为varchar的表中有2列。但我将这些值存储为日期,如2016年10月14日。现在我需要找到这两列的月份差异。我无法为此使用DATEDIFF,因为列被声明为varchar。有没有办法找到差异?

使用转换方法并计算差异:

  SELECT DATEDIFF(DAY,CONVERT(DATETIME,'14/10/2016',103),CONVERT(DATETIME,'15/10/2016',103))

使用转换方法并计算差异:

  SELECT DATEDIFF(DAY,CONVERT(DATETIME,'14/10/2016',103),CONVERT(DATETIME,'15/10/2016',103))

首先,修复数据结构。短期内,您只需添加正确的列作为计算列:

alter table t realdate_col1 as (convert(date, col1, 103));
alter table t realdate_col2 as (convert(date, col2, 103));
你应该使用正确的类型

在任何情况下,转换程序都会说明要执行的操作:

select datediff(day, convert(date, col1, 103), convert(date, col2, 103))
或者,通过以下过程修复数据:

update t
    set col1 = convert(varchar(10), convert(date, col1, 103), 120),
        col2 = convert(varchar(10), convert(date, col2, 103), 120);
然后:


首先,修复数据结构。短期内,您只需添加正确的列作为计算列:

alter table t realdate_col1 as (convert(date, col1, 103));
alter table t realdate_col2 as (convert(date, col2, 103));
你应该使用正确的类型

在任何情况下,转换程序都会说明要执行的操作:

select datediff(day, convert(date, col1, 103), convert(date, col2, 103))
或者,通过以下过程修复数据:

update t
    set col1 = convert(varchar(10), convert(date, col1, 103), 120),
        col2 = convert(varchar(10), convert(date, col2, 103), 120);
然后:


您可以使用“CAST”或“CONVERT”函数,以便SQL解释所需的数据类型

演员阵容:

转换:

用日期字段替换GETDATE部分。一旦这项工作正常,就可以将其添加到DATEDIFF函数中,将varchar字段转换为DATE,然后计算所需的差值

CONVERT中的格式有很多变体,“105”表示什么格式。您可以在此处找到格式列表:


您可以使用“CAST”或“CONVERT”函数,以便SQL解释所需的数据类型

演员阵容:

转换:

用日期字段替换GETDATE部分。一旦这项工作正常,就可以将其添加到DATEDIFF函数中,将varchar字段转换为DATE,然后计算所需的差值

CONVERT中的格式有很多变体,“105”表示什么格式。您可以在此处找到格式列表:


是的,使用CONVERT将它们转换为DATEDIFF表达式中的datetimes。修复我们的损坏设计-如果列存储日期和时间,则它必须是DATETIME或DATETIME2n,在SQL Server 2008和newerYes中,使用CONVERT将它们转换为DATEDIFF表达式中的datetimes。修复我们的损坏设计-如果列存储日期和时间,在SQL Server 2008及更新版本中,它必须是DATETIME或DATETIME2n