SQL - 更改日期类型 Varchar 的格式

SQL - Change Format of Date Type Varchar

我正在处理 table,其中 dateofbirth 列的类型为 varchar(50)

此列中的日期值采用多种格式。

我想按以下格式全部显示:DD/MM/yyyy

我尝试测试如下值:

declare @testString1 as varchar(50) = '02/19/2015'
declare @testString2 as varchar(50) = '19/02/2015'
declare @testString3 as varchar(50) = '2015/02/19'

declare @converted1 as date = CONVERT(date,@testString1)
declare @converted2 as date = CONVERT(date,@testString2)
declare @converted3 as date = CONVERT(date,@testString3)

他们都返回了值:2015-02-19

我尝试再次将日期转换为 varchar:

SELECT convert(varchar,@converted1,105)

这也返回了 2015-02-19

为什么我无法将 DD/MM/yyyy 格式的 date 转换为 varchar?

请注意,我正在修理别人的烂摊子。我没有创建这个 table 并且我知道将日期时间存储在 varchar 中是个坏主意。 在将格式更改回日期时间之前,我只需要一个临时解决方案和正确的 select query

将字符串转换为日期时需要精确的格式样式,反之亦然。

如果您需要使用 DD/MM/yyyy 格式将日期转换为 nvarchar - 那么您需要 103 而不是 105(这是 dd-mm-yyyy) 作为格式样式。

例如:select convert(nvarchar(20), getdate(), 103) returns 16/10/2015

有关各种格式样式的详细信息,请参阅 MSDN

此外 - 将日期存储在 table 中作为 varchar 而不是 datetime 对我来说似乎不是一个好主意 - 所以你可能应该重构你的 table 并将这些值转换为日期时间。

您可以使用:

select RIGHT('0'+ CONVERT(VARCHAR,day(GETDATE())),2) + '-' + RIGHT('0'+ 
CONVERT(VARCHAR,month(GETDATE())),2) + '-' + 
RIGHT('0000'+CONVERT(VARCHAR,year(GETDATE())),4)

或:

Select CAST(CONVERT(VARCHAR(10), GETDATE(), 105) AS nvarchar(20))