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))
我正在处理 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))