转换然后从SQL Server中的不同表中区分两个日期

时间:2014-08-01 11:40:48

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

有人可以建议从不同的表格中区分两个日期的最佳方法(目前以格式varchar存储为dd/mm/yyyy hh:mm:ss,因此可能需要先转换它们吗?)

我尝试了下面但没有运气:

SELECT a.[Name], 
       a.[App], 
       CONVERT(VARCHAR(24), a.[Creation Date], 103),
       CONVERT(VARCHAR(24), b.[Creation Date 2], 103)
FROM a
INNER JOIN b ON a.[Name] = b.[Name] 
             AND DATEDIFF(day, CONVERT(VARCHAR(24), a.[Creation Date], 103),
                               CONVERT(VARCHAR(24), b.[Creation Date 2], 103)) < 1

内部联接用于匹配&#39;名称&#39;在表a和b中

由于

2 个答案:

答案 0 :(得分:0)

这会有用吗?

SELECT a.[Name], 
       a.[App], 
       CONVERT(VARCHAR(24), a.[Creation Date], 103),
       CONVERT(VARCHAR(24), b.[Creation Date 2], 103)
FROM a
INNER JOIN b
ON a.[Name]=b.[Name] 
AND DATEDIFF(day,CONVERT(VARCHAR(24), a.[Creation Date], 103),
                 CONVERT(VARCHAR(24), b.[Creation Date 2], 103)) > 1
AND ISDATE([a.Creation Date])=1
AND ISDATE([b.Creation Date 2])=1                               

答案 1 :(得分:0)

您希望将它们从VARCHAR转换为DATETIME2(3),以便将它们视为日期时间数据类型而不是字符串!

所以你正在使用的是将它们从varchar转换为varchar(24) - 而且毫无意义....

请改用:

SELECT 
   a.[Name], 
   a.[App], 
   CONVERT(DATETIME2(3), a.[Creation Date], 103),
   CONVERT(DATETIME2(3), b.[Creation Date 2], 103)
FROM a
INNER JOIN b ON a.[Name] = b.[Name] 
             AND DATEDIFF(day, CONVERT(DATETIME2(3), a.[Creation Date], 103),
                               CONVERT(DATETIME2(3), b.[Creation Date 2], 103)) < 1

最佳解决方案将存储这些日期....作为表格中的日期!停止使用字符串作为一切 - 如果它看起来像一个日期,像日期一样嘎嘎叫,闻起来像一个日期 - 这是一个日期,应该存储起来!