【发布时间】:2022-01-22 06:11:33
【问题描述】:
我有一个存储日期的 varchar 列,但格式非常混乱。我有mm/dd/yyyy、m/d/yyyy 和yyyy-ww-0 格式的日期。我想拥有mm/dd/yyyy 格式的所有内容,但我不确定如何更改m/d/yyyy 的值并将它们设为0m/0d/yyyy(并更新原始数据集中的列),以及如何处理日期yyyy-ww-0。
【问题讨论】:
-
为什么不使用
date数据类型存储您的日期,这样您就不会遇到任何麻烦。 -
您可以使用带有文化的 TRY_CONVERT 函数,
TRY_CONVERT(date,YOUR_COLUMN,101) -
@Stu 当我尝试这样做时,由于格式不正确,我得到一个超出范围的值错误。
-
你需要做一个非常漫长而痛苦的过程,在这个过程中你找到所有不同的变体,弄清楚如何处理每个变体并将其转换为日期(使用不同的字符串操作和格式样式)并将您的核对数据重新添加到日期列中。即使那样,即使您允许 varchar,您也会冒着完全无意义值的风险,因此您将不知道意图可能是什么,或者像 2021 年 1 月 2 日这样的事情,您永远不会知道用户的意思是 2 月 1 日还是1 月 2 日。但是没有办法解决这个问题,您只需要使用最佳猜测即可。
-
“我希望所有内容都采用 mm/dd/yyyy 格式” 不要这样做,这只会隐藏问题;您对数据类型
varchar的错误选择。修复您的设计,并使用日期和时间数据类型。你已经在last question 中告诉过你这个
标签: sql sql-server date datetime sql-update