0

我有一列以 YYYY-MM-DD HH:MM:SS.MSS 格式存储日期和时间值。我有另一个表,它将日期和时间值存储为格式为“M/D/YYYY HH:MM:SS AM”的字符串

现在如何将 YYYY-MM-DD HH:MM:SS.MSS 这种格式转换为 M/D/YYYY HH:MM:SS AM。转换后,我可以将转换日期与日期时间字符串进行比较。例如

A.Date_time = '2013-01-08 12:04:00.000' B.Date_time = convert (A.Date_time) -- 转换格式为 M/D/YYYY HH:MM:SS AM ...

if(B.Date_time = 'convert (A.Date_time)' - 我怎样才能将转换日期与日期时间字符串进行比较。...

4

1 回答 1

1

不要转换为字符串进行比较,转换为日期进行比较。

SELECT <cols>
  FROM A
  INNER JOIN B
  ON A.Date_time = CONVERT(DATETIME, B.Date_time, 101);

您可能需要先清理数据 - 当您使用字符串存储日期时(出于各种原因,您永远不应该这样做),任何人都可以在其中塞入任何垃圾而无需验证。因此,不能保证您的所有值可以成功转换为日期时间。

对于更改的要求,我们可以尝试以这种方式 sussing 可怕字符串的日期时间部分:

SELECT <cols>
  FROM A
  INNER JOIN B
  ON A.Date_time = CONVERT(DATETIME, 
   SUBSTRING(B.Date_time, CHARINDEX(' - ', B.Date_time) + 3, 255), 101);

你甚至可以先把它拿出来,例如

;WITH x AS (SELECT B.Date_time, RealDateTime = CONVERT(DATETIME, 
   SUBSTRING(B.Date_time, CHARINDEX(' - ', B.Date_time) + 3, 255), 101)
   FROM B
)
SELECT x.Date_time, x.RealDateTime FROM x
-- add joins, comparisons, etc.

恕我直言,您应该专注于修复数据类型,而不是解决差异。或者至少与设计这个烂摊子来清理它的人争论。

于 2013-01-11T17:11:00.280 回答