【问题标题】:Converting date formats in sql在sql中转换日期格式
【发布时间】:2021-06-10 12:30:03
【问题描述】:

最近我在使用日期格式时遇到了一个问题。在下表中,我有以下日期,这些日期是在 microsoft SQL Server management studio 2014 中查询时获得的

select [Month Ending Date] from drug_practise 

dates
12/1/2016
11/1/2016
10/1/2016
9/1/2016
8/1/2016

但我需要将这些日期转换成正确的格式,例如 YYYY-mm-dd,所以我使用了以下代码:-

select convert(date,[Month Ending Date],103) from drug_practise 

但它会引发如下错误:-

Msg 241, Level 16, State 1, Line 3
Conversion failed when converting date and/or time from character string.

任何人都可以帮助我如何处理日期并避免此类错误?

【问题讨论】:

  • 在提供示例日期时,包含该月 12 日之后的日期会很有用。这似乎非常明显,但需要不时重复。
  • 我很确定这个问题已经得到解答。你试过mysqltutorial.org/mysql-str_to_date 吗?
  • 这是给 [tag;sql-server] 的,不是mysql。如果你edit你的问题告诉我们版本会有所帮助; date 的东西在那个软件中取得了进展。
  • 日期没有格式。日期的可视化表示。将日期存储为适当的日期或日期时间列,让可视层关心格式,让数据库关心数据存储和查询。
  • 小提琴应该适用于任何人。您是说小提琴在运行时会产生错误吗?但它显然不适用于您的实际表,因为 - 正如我所说 - 您有无法转换的值。这就是为什么您不应该将日期存储为字符串的原因。如果您要导入此数据,请更改您的表格和导入过程。如果问题出在源数据上(看起来可能是这样),那么您需要与您的同事、老板、客户讨论如何处理存在这些问题的行。

标签: sql-server date


【解决方案1】:

如果前 2 位数字代表日期,我想您应该尝试格式 104 而不是 103 - 至少这与提供的示例效果很好:

DECLARE @t TABLE(myDateStr CHAR(10))
INSERT INTO @t VALUES
('12/1/2016')
,('11/1/2016')
,('10/1/2016')
,('9/1/2016')
,('8/1/2016')

SELECT myDateStr, TRY_CONVERT(DATE, myDateStr, 104) AS myDate, TRY_CONVERT(VARCHAR(10), TRY_CONVERT(DATE, myDateStr, 104), 23) AS myDateStrNew
  FROM @t

如果前两位数字代表月份,您可以尝试使用格式 0 代替:

DECLARE @t TABLE(myDateStr CHAR(10))
INSERT INTO @t VALUES
('12/1/2016')
,('11/1/2016')
,('10/1/2016')
,('9/1/2016')
,('8/1/2016')

SELECT myDateStr, TRY_CONVERT(DATE, myDateStr, 0) AS myDate, TRY_CONVERT(VARCHAR(10), TRY_CONVERT(DATE, myDateStr, 0), 23) AS myDateStrNew
  FROM @t

【讨论】:

    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2016-06-08
    • 2019-01-23
    • 2021-04-30
    • 2015-04-30
    相关资源
    最近更新 更多