【问题标题】:How to re-update a date to a different format?如何将日期重新更新为不同的格式?
【发布时间】:2012-04-19 05:34:41
【问题描述】:

我有一列存储日期值。但是,有些日期是如何以错误的格式填充的。该列的日期格式为DD/MM/YYYY,但日期填充为MM/DD/YYYY。如何将值从 MM/DD/YYYY 更改为 DD/MM/YYYY?例如。此时,它显示03/05/2012,它被读取为3rd May 2012,因此它确实应该被填充为05/03/20125th March 2012)。

上面已经解决了,但是我有一个类似的问题: 如何将“2012-12-01 12:33:00.0”翻转为“2012-01-12 12:33:00.0”?我试过“select convert(varchar(50), convert(datetime, log_date, 103), 121)” 101 和 103 都用过,还是不能翻转。

【问题讨论】:

  • 如果列的类型是datedatetimedatetime2,则它没有具有格式。另外 - all 的日期是否“存储”不正确?如果不是,我们如何区分需要翻转的日期和不需要翻转的日期?
  • 嗨达米安。很容易确定哪个日期需要翻转。日期列不应大于当前日期。
  • 但是 01/03/2012 是 1 月 3 日还是 3 月 1 日?两者都是过去。
  • 这是我无法纠正的问题,必须逐个查看,但我不希望问题扩大。

标签: sql sql-server date format


【解决方案1】:

您可以使用convert function 在字符串和日期时间值之间进行转换。

Convert a DD/MM/YYYY string to a datetime: convert(datetime, value, 103)
Convert a datetime to a DD/MM/YYYY string: convert(varchar(10), value, 103)
Convert a MM/DD/YYYY string to a datetime: convert(datetime, value, 101)
Convert a datetime to a MM/DD/YYYY string: convert(varchar(10), value,  101)

您需要哪些取决于您是否将日期存储为表中的 varchar 或 datetime。

【讨论】:

  • 我想将 MM/DD/YYYY 值转换为 DD/MM/YYYY 值。
  • @cooldude:然后使用第三个将字符串转换为日期时间值,然后使用第二个将日期时间值转换为字符串:convert(varchar(10), convert(datetime, value, 101), 103)
  • 谢谢!这行得通。请问除了101和103还有什么参数吗? YYYY-MM-DD hh:mi:ss.mmm 和 YYYY-DD-MM hh:mi:ss.mmm 的格式是什么?
  • 谢谢古法。我已经解决了这个问题。但是我在另一个数据库中有类似的问题。这次,日期格式为 YYYY-MM-DD hh:mi:ss.mmm。例如。如何将“2012-12-01 12:33:00.0”翻转为“2012-01-12 12:33:00.0”?我曾尝试使用您的解决方案,但时间部分在 CONVERT 之后消失了。
  • @cooldude:字符串中需要更多空间,请使用varchar(21) 而不是varchar(10)
【解决方案2】:

日期存储为时间点,而不是特殊样式。如何返回给您可能取决于您的数据库的语言/文化设置。

我认为您可以使用 SELECT CONVERT(...) 来获得您想要的任何格式。以下是一些示例:http://www.sql-server-helper.com/tips/date-formats.aspx

【讨论】:

  • 您好,我使用了转换功能,但没有帮助。实际上我想做的是对那些坏数据执行更新。我想将 03/05/2012 的现有值转换为 05/03/2012
  • @cooldude 我同意 Damien_The_Unbeliever 在您的问题下方提出的 cmets。如果该列是日期类型,则该列中的数据实际上没有格式本身,因此您不必尝试转换值。问题仅在于数据库在返回时如何呈现数据。
  • @cooldude 不知道对你有没有用:blogs.msdn.com/b/sqlserverfaq/archive/2009/11/13/…
  • 我的表格中有很多日期字段。说,date1 和 date2 列。只有 date1 以错误的格式显示。但是 date2 的格式正确。如果我在返回时更改数据库呈现数据的方式,它将影响我所有的日期字段。
【解决方案3】:

我不知道日期是如何进入您的专栏的。但是转换功能在这里可能会有所帮助:

SELECT convert(datetime, '03/05/2012',103)

您可以查看这篇 msdn 文章了解不同的日期和时间样式: http://msdn.microsoft.com/de-de/library/ms187928.aspx

希望这会有所帮助。

顺便说一句:如果问题只是它如何存储在表格本身中,您应该查看您的文化设置。在这里您可以找到不同 sys 语言的日期格式:

select * from sys.syslanguages

【讨论】:

  • 从 excel 文件错误地填充了错误的日期。这就是我现在清理它们的原因。我会看看你的转换功能,看看它是否有帮助。
  • 您好,我使用了转换功能,但没有帮助。实际上我想要做的是对那些坏数据执行更新。我想将 03/05/2012 的现有值转换为 05/03/2012
猜你喜欢
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 2019-06-30
  • 2020-09-30
  • 2015-12-13
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
相关资源
最近更新 更多