我正在处理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
。
答案 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。