我有一个列,以YYYY-MM-DD HH:MM:SS.MSS格式存储日期和时间值。我有另一个表格,以“M / D / YYYY HH:MM:SS AM”格式将日期和时间值存储为 string 。
现在如何将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)' - 如何将转换日期与日期时间字符串进行比较。 ...
答案 0 :(得分:1)
不要转换为字符串进行比较,转换为日期进行比较。
SELECT <cols>
FROM A
INNER JOIN B
ON A.Date_time = CONVERT(DATETIME, B.Date_time, 101);
您可能需要先清理数据 - 当您使用字符串存储日期时(由于各种原因您绝不应该这样做),任何人都可以在没有验证的情况下填充任何垃圾。因此,无法保证您的所有值都可以成功转换为日期时间。
对于更改后的要求,我们可以尝试以这种方式来处理可怕字符串的日期时间部分:
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.
恕我直言,你应该专注于修复数据类型,而不是解决差异。或者至少与设计这个烂摊子的人争论清理它。