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

Posted

技术标签:

【中文标题】如何更改 varchar 数据类型列的日期时间格式【英文标题】:How to change datetime format of varchar datatype column 【发布时间】:2018-11-03 16:55:34 【问题描述】:

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

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

【问题讨论】:

什么 SQL Server 版本? 268142 是什么意思?朱利安日期? 对于关系数据库设计来说似乎是个糟糕的选择... 请告知应该是什么! 日期应保留为日期,数字应保留为数字。我真的无法提供更好的建议,因为除了您在此处发布的内容之外,我对您的系统一无所知。 【参考方案1】:

您可以将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)

【讨论】:

我有一个错误'try_convert'不是一个可识别的内置函数名。 您标记了 2014。为您的版本选择 @@Version 并从 sys.databases 中选择名称、兼容性级别以获得兼容性级别。应该 >=110 如果我将兼容级别更改为 110,对我的数据库有影响吗? @MuhammadAliKhamis 为了更好,但您确实需要咨询您的 DBA。 2008年可能是有原因的【参考方案2】:

您可以使用这种大小写转换语句:

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

【讨论】:

以上是关于如何更改 varchar 数据类型列的日期时间格式的主要内容,如果未能解决你的问题,请参考以下文章

将不同格式列的String数据类型的日期转换为PostgreSQL中的日期数据类型

数据类型从 varchar2 到日期、数字等的隐式转换

如何更改此“2017 年 11 月 13 日”的日期格式 [重复]

如何将包含日期的 varchar 字段类型转换为正确的日期格式

如果它是主键并且被索引,如何更改列的数据类型?

如何使用熊猫更改数据框中的日期时间格式? [复制]