如何以不同的格式转换Sql server Datetime

时间:2013-01-11 17:06:50

标签: sql-server-2008

我有一个列,以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)' - 如何将转换日期与日期时间字符串进行比较。 ...

1 个答案:

答案 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.

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