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

Posted

技术标签:

【中文标题】使用自定义格式在 SQL Server 上将 varchar 转换为 datetime【英文标题】:Convert varchar to datetime on SQL Server with custom format 【发布时间】:2015-02-11 12:05:31 【问题描述】:

我有一个 varchar 列,它表示以下格式的日期:“DDMMYYHHMMSS”。我正在以这种方式将此 varchar 转换为日期时间:

select * from myTable where getdate() >= convert(datetime, concat(case when substring(myDate, 5, 2) >= '0' and substring(myDate, 5, 2) <= '50' then 20 else 19 end, substring(myDate, 5, 2), '-', substring(myDate, 3, 2), '-', substring(myDate, 1, 2), ' ', substring(myDate, 7, 2), ':', substring(myDate, 9, 2), ':', substring(myDate, 11, 2)), 120)

解释:首先我要打破 varchar 以分别获取所有字段(日、月、年等)。然后,我将这些字段连接起来,为 SQL Server 构建一个已知格式的 varchar:“YYYY-MM-DD HH:MI:SS”。最后,我使用 convert 函数将 varchar 转换为格式为 120 的日期时间。SQL 开头有一个条件,我检查 2 位数年份以了解如何将其转换为 4 位数年份。

我想知道是否有更好的方法来编写这个 SQL。 (它必须与 SQL Server 2005 及更高版本一起使用)

在 Oracle 中对我来说似乎要容易得多:

sysdate >= to_date(myDate, 'DDMMYYHH24MISS')

【问题讨论】:

【参考方案1】:

如果您使用的是 SQL Server 2012 或更高版本,则可以使用 DATETIMEFROMPARTS (Transact-SQL)

declare @S varchar(12) = '100598101112';

select datetimefromparts(
                        iif(substring(@S, 5, 2) <= 50, '20', '19') + substring(@S, 5, 2),
                        substring(@S, 3, 2),
                        substring(@S, 1, 2),
                        substring(@S, 7, 2),
                        substring(@S, 9, 2),
                        substring(@S, 11, 2),
                        0
                        );

【讨论】:

谢谢。但我忘了提到我必须保持与 2005 年之前的旧版本 SQL Server 的兼容性。

以上是关于使用自定义格式在 SQL Server 上将 varchar 转换为 datetime的主要内容,如果未能解决你的问题,请参考以下文章

如何在 XCode 上将自定义文件扩展名导入 iOS 项目?

SQL Server的自定义排序功能

sql server中,一栏位格式如:国家-省-城市-... 现在我要按照城市来筛选数据,怎么使用sql语句来实现?

如何在 Mac 上将 ASP.Net Core 连接到 SQL Server Docker 容器

如何以某种格式将日期和时间插入 SQL Server 数据库? [复制]

如何在 SQL Server 上将 LinkServer 添加到 MySQL