在SQL Server DateTime字段中翻转月和日

时间:2011-09-06 06:18:06

标签: sql-server

我的部分数据被错误地解析(由于早期处理文化时出错),因此应该翻转月份和日期。在SQL Server中有一种简单的方法吗?幸运的是,在数据集中它仍然足够早,很容易找到坏数据。

更新我认为这样可行:

SELECT seen, DATEADD(DAY, DATEDIFF(DAY, seen,
    CONVERT(DATETIME, CAST(YEAR(seen) AS VARCHAR(4)) 
        + RIGHT('0'+CAST(DAY(seen) AS VARCHAR(2)),2) + 
        + RIGHT('0'+CAST(MONTH(seen) AS VARCHAR(2)),2), 112)), seen)
FROM TermStats
WHERE seen < '2011-09-01' AND DAY(seen) <= 12

但我认为我可以做得更好。所有好日期都在9/1之后。 (你可以说我真的很幸运......哈哈)

SELECT DISTINCT YEAR(seen), MONTH(seen), DAY(seen)
FROM TermStats
ORDER BY YEAR(seen), MONTH(seen), DAY(seen)

2006    2   13
2011    3   9
2011    4   9
2011    5   9
2011    6   9
2011    9   3
2011    9   4
2011    9   5
2011    9   6

1 个答案:

答案 0 :(得分:1)

我个人不会通过字符串操作来完成它。完全有可能你可以在存储过程中很好地完成它,但我个人(作为一个没有SQL经验的人)编写一个客户端工具来修复它:

  • 获取您需要修复的每一行的ID和日期(将日期/时间值取为日期/时间值,作为字符串)
  • 创建正确的日期,例如在C#中使用new DateTime(dt.Year, dt.Day, dt.Month);来翻转错误日期的字段
  • 使用参数化查询更新数据库 - 再次,将日期转换为字符串

基本上,只要您可以,请避免在文本和其他格式之间进行转换。它只会导致你已经发现的那种痛苦。