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

时间:2017-05-11 11:09:54

标签: sql sql-server-2008

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

3 个答案:

答案 0 :(得分:2)

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

alter table t realdate_col1 as (convert(date, col1, 103));
alter table t realdate_col2 as (convert(date, col2, 103));

你应该使用正确的类型。

无论如何,convert()解释了该怎么做:

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 alter column col1 date;
alter table t alter column col2 date;

答案 1 :(得分:1)

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

PHONE_REGEX.test

答案 2 :(得分:0)

您可以使用' CAST'或者' CONVERT'函数使SQL解释数据是您需要的数据类型。

<强> CAST:

 SELECT CAST(GETDATE() AS DATE) -- 2017-05-11

<强> CONVERT:

 CONVERT(VARCHAR(10),GETDATE(),110) -- 11-05-2017

用日期字段替换GETDATE()部分。一旦你有了这个工作,你可以将它添加到你的DATEDIFF函数,将varchar字段转换为DATE,然后计算你之后的差异。

CONVERT中的格式有很多种,&#39; 105&#39;代表什么格式。您可以在此处找到格式列表:

https://www.w3schools.com/sql/func_convert.asp