【问题标题】:Update some values in a column based on a condition SQL Server根据条件 SQL Server 更新列中的某些值
【发布时间】:2022-01-22 06:11:33
【问题描述】:

我有一个存储日期的 varchar 列,但格式非常混乱。我有mm/dd/yyyym/d/yyyyyyyy-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


【解决方案1】:

试试这个

select format(cast([column name] as date),'mm/dd/yyyy') from [table name]

【讨论】:

    猜你喜欢
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多