如何更改varchar数据类型列的日期时间格式

时间:2018-11-03 16:55:34

标签: sql-server tsql sql-server-2014

如何在SQL Server中更改varchar数据类型列的日期时间格式。
enter image description here

[Value]列的数据类型为varchar。我无法将数据类型更改为日期时间,因为此列还包含数字值。该表正在通过查询更新。我需要格式yyyy-mm-dd hh:mm:ss(24h)。怎么样?

2 个答案:

答案 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