首页 > 解决方案 > 如何将 nvarchar 字符串 mm/dd/yyyy hh:mm:ss 转换为日期时间?

问题描述

我有一个 nvarchar 列,其日期格式如下:“04/18/2021 13:04:15”(不带引号)。我想将此列更改为日期时间并迁移所有数据。我查找了格式代码并发现,与我的变体最接近的代码是 US (101)。所以我试图

UPDATE DropPhotos
SET CreationDateTime = CONVERT(NVARCHAR(255), CONVERT(DateTime, CreationDateTime, 101))
ALTER TABLE DropPhotos
ALTER COLUMN CreationDateTime DateTime

但我得到错误:

将数据类型 nvarchar 转换为 datetime 时出错

标签: sqlsql-servertsqldatetime

解决方案


如果您拥有的格式只是您列出的 2 种格式:

 Select t.CreationDateTime
      , us_101_format = try_convert(datetime, t.CreationDateTime, 101)
      , german_104_format = try_convert(datetime, t.CreationDateTime, 104)
      , dt.CreationDateTime
   From (Values ('04/18/2021 13:04:15'), ('26.04.2021 06:09:03'))                       As t(CreationDateTime)
  Cross Apply (Values (coalesce(try_convert(datetime, t.CreationDateTime, 101)
                              , try_convert(datetime, t.CreationDateTime, 104))))       As dt(CreationDateTime)
  --Where dt.CreationDateTime Is Null;
  Where dt.CreationDateTime Is Not Null;

如果您还有一些格式为“mm.dd.yyyy hh:mm:ss”,那么您将很难确定该条目使用哪种格式。

如果您有另一种独特的格式,您可以添加到该格式的转换列表中。


推荐阅读