如何将 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_DateMM/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 日期的主要内容,如果未能解决你的问题,请参考以下文章

完全按原样将 Datetime 转换为 Varchar

将日期(varchar)和时间(varchar)转换为日期时间Oracle

在 SQL Server 中将 varchar 转换为 datetime [重复]

如何在 C# 中将字符串转换为 DateTime?

使用自定义格式在 SQL Server 上将 varchar 转换为 datetime

将 varchar 转换为 datetime 并添加秒