sql - 如何将 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 时出错
解决方案
如果您拥有的格式只是您列出的 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”,那么您将很难确定该条目使用哪种格式。
如果您有另一种独特的格式,您可以添加到该格式的转换列表中。
推荐阅读
- firebase - onActivityCreated中的addSnapshotListener、get、update等被多次调用(例如用户旋转屏幕时)
- reactjs - 如何将字段值发送到初始值?
- json - 如何在 Angular 中使用基于对象的 json 数据
- python - 基于第一个非零出现的子集熊猫数据帧
- c# - 相同的方法在 VS 调试控制台和 Unity 调试控制台中的作用不同
- javascript - 加载 GeoJson Google API - CORS 策略
- javascript - 从本地文件在 javascript 中加载 SVG
- angular - 如何等待服务准备好Angular?
- .net - 如何从多个 beanstalk 应用程序实例登录到一个 aws cloudwatch 流
- c# - 在 C# 中向后(从头到尾)读取大文件