如何在SQL Server中更改varchar数据类型列的日期时间格式。
[Value]列的数据类型为varchar。我无法将数据类型更改为日期时间,因为此列还包含数字值。该表正在通过查询更新。我需要格式yyyy-mm-dd hh:mm:ss(24h)。怎么样?
答案 0 :(得分:5)
您可以将Try_Convert()
与IsNull()
配合使用
要明确。结果仍然是字符串
示例
Declare @YourTable table (Value varchar(50))
Insert Into @YourTable values
('268142')
,('Jan 1 1900 12:04PM')
Select *
,NewVal = IsNull(format(try_convert(datetime,Value),'yyyy-MM-dd HH:mm:ss'),Value)
From @YourTable
返回
Value NewVal
268142 268142
Jan 1 1900 12:04PM 1900-01-01 12:04:00
不知道编辑
Format()是不是表演者,应该谨慎使用。另一种方法可能是
NewVal = IsNull(try_convert(varchar(50),try_convert(datetime,Value),120),Value)
答案 1 :(得分:0)
您可以使用以下区分大小写的语句:
declare @date varchar(max)
set @date='Jan 1 1999 12:00AM'
Select case when right(@date,2)='AM' then convert(datetime,SUBSTRING(@date,1,len(@date)-2)+':00',121)
else dateadd(hour,12,convert(datetime,SUBSTRING(@date,1,len(@date)-2)+':00',121)) end