将 varchar 转换为日期

问题描述 投票:0回答:4

我正在使用 SQL Server

我有一个表,其日期字段设置为 varchar,并且其中的日期格式不同

示例

OldDateOfBith
23/05/1990
4/6/1985
2001-01-06

我需要将此字段转换为日期时间类型的新字段

NewDateOfBith
1990-05-23
1985-06-04
2001-01-06

我可以使用

进行转换
Cast(OldDateofBirth as datetime) -- will give error for 23/05/1990
CONVERT(DateTime, OldDateofBirth, 103) -- will give error for 2001-01-06

有没有办法转换所有日期而不考虑格式?

sql sql-server date casting
4个回答
1
投票

使用

TRY_CAST()
TRY_CONVERT
功能。这是解决您的问题的最佳且最简单的方法:

coalesce(TRY_CAST(OldDateofBirth as datetime),TRY_CONVERT(DateTime, OldDateofBirth, 103));

为了快速检查,您可以执行:

select coalesce(TRY_CAST('2001-01-06' as datetime), TRY_CONVERT(DateTime, '2001-01-06', 103));

文档链接:


1
投票

由于您不知道字符串日期的确切日期格式,因此无法转换

例如“12/12/2018”在这里你不知道哪一天哪是月份


1
投票

在下面找到一个关于问题上发布的格式的想法:

--- 查询数据---

INSERT INTO dbo.Test (OldDateOfBith) VALUES
('23/05/1990'),
('4/6/1985'),
('2001-01-06')

--- 查询---

SELECT
    CASE
        WHEN OldDateOfBith LIKE '____-__-__' THEN CONVERT(DATETIME2, OldDateOfBith, 120)
        ELSE CONVERT(DATETIME2, OldDateOfBith, 103)
    END AS NewDateOfBith
FROM
    dbo.Test

上面的查询仅在以下版本的 SQL Server 上测试过: Microsoft SQL Server 2016 (RTM-GDR) (KB4019088) - 13.0.1742.0 (X64) Jul 5 2017 23:41:17 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows 10 Home 6.3 <X64> (Build 17134: )


话虽如此,您可能需要分多个步骤运行。


0
投票

SET DATEFORMAT dmy; SELECT TRY_CAST ( OldDateofBirth AS datetime) as newbirddate from...

© www.soinside.com 2019 - 2024. All rights reserved.