首页 > 解决方案 > 在sql中转换日期格式

问题描述

最近我在使用日期格式时遇到了一个问题。在下表中,我有以下日期,这些日期是在 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.

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

标签: sql-serverdate

解决方案


如果前 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

推荐阅读