我在表中有2列,数据类型为varchar
。但我已将值存储为14/10/2016
之类的日期。现在我需要找到这两列的月份不同。我无法使用DATEDIFF
,因为列声明为varchar
。有没有办法找到差异?
答案 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;代表什么格式。您可以在此处找到格式列表: