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

时间:2015-10-16 11:31:11

标签: sql sql-server date format varchar

我正在处理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格式将日期转换为varchar?

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

2 个答案:

答案 0 :(得分:1)

您可以使用:

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))

答案 1 :(得分:0)

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

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

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

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

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