如何将 varchar 日期转换为 datetime2 日期
Posted
技术标签:
【中文标题】如何将 varchar 日期转换为 datetime2 日期【英文标题】:How to convert varchar dates into datetime2 dates 【发布时间】:2019-05-01 22:57:36 【问题描述】:我已将我的表上传到 SQL Server 中,每一列都是 varchar(max)
或 nvarchar(max)
数据类型。我这样做的原因是因为我从一个包含数百万条记录的 .CSV
文件上传,我不想在将数据输入 SQL Server 之前花费数小时清理数据。
但是,我现在的 Log_Date
列中包含所有类型的字符。我能够识别我想要的两个格式化 log_dates。
两种日志日期格式是
MM/DD/YYYY MM:SS
(或M/D/YYYY M:SS)或
采用适当的日期时间格式
我无法将 Log_Date
转换为 datetime
字符,因为其中还有其他数据类型(单词、符号、数字和符号等)会阻止转换。
如何将我的 varchar Log_Date
或 MM/DD/YYYY MM:SS
(或 M/D/YYYY M:SS)转换为 @ 987654330@?
这是我尝试过的,但它不会转换记录。
select
id
,log_date
,case when log_date like '%[0-9]%/%[0-9]%/%[0-9]%'
then try_convert(datetime2,log_date,126)
else null
end as Potato
from
full_union
where
id not like '%[^0-9]%'
and id = 4112541
以下是我的结果摘录
id log_date Potato
-----------------------------------------------
4112541 2/13/2019 15:41 NULL
4112541 2/13/2019 15:41 NULL
4112541 2019-04-18 11:42:00.0000000 NULL
4112541 2019-04-18 11:45:00.0000000 NULL
【问题讨论】:
【参考方案1】:格式 126 是非常具体的 ISO 标准格式,日期和时间之间有一个“T”。
SQL Server 非常擅长识别格式,所以这可能就足够了:
(case when log_date like '%[0-9]%-%[0-9]%-%[0-9]%'
then try_convert(datetime2, log_date)
end) as Potato
编辑:
由于您的模式中的/
,您遇到了问题。但即使是固定的,它也不起作用。连字符发生了一些奇怪的事情。这确实有效:
(case when log_date like '%[0-9]%_%[0-9]%_%[0-9]%'
then try_convert(datetime2,log_date)
else '2000-01-01'
end) as Potato
【讨论】:
我试过了,但它仍然返回 null。不知道为什么转换不起作用。铸造作品:cast(log_date as datetime2)。试试这个小提琴:sqlfiddle.com/#!18/2b3af/6 感谢 KingOfAllTrades!到目前为止,这适用于我当前的身份。我会尽快尝试其余的日志! 有谁知道我怎样才能让 KingOfAllTrades 回答我的问题? @Computer_Nerd 。 . .您可以接受此答案或投票。任何人(有足够的声誉)都可以投票给答案。只有 OP 可以接受 - 每个问题只能接受一个答案。 @GordonLinoff 我的问题是由单击“添加评论”而不是“发布您的答案”的人回答的。我正在寻找一种方法来表彰通过评论回答我问题的人。以上是关于如何将 varchar 日期转换为 datetime2 日期的主要内容,如果未能解决你的问题,请参考以下文章
将日期(varchar)和时间(varchar)转换为日期时间Oracle
在 SQL Server 中将 varchar 转换为 datetime [重复]