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

时间:2015-02-11 12:05:32

标签: sql-server datetime

我有一个varchar列,它以下列格式表示日期:" DDMMYYHHMMSS"。我以这种方式将此varchar转换为datetime:

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:&#34; YYYY-MM-DD HH:MI:SS&#34;。最后,我使用转换函数将varchar转换为日期时间格式为120.在SQL开头有条件,我检查2位数年份,知道如何将其转换为4位数年份。 / p>

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

在Oracle中,对我来说似乎更容易:

sysdate >= to_date(myDate, 'DDMMYYHH24MISS')

1 个答案:

答案 0 :(得分:4)

如果您使用的是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
                        );