转换为日期的最佳方式

时间:2010-05-06 13:22:51

标签: sql sql-server sql-server-2005 tsql

我有遗留系统,其中所有日期字段都以YMD格式维护。例如:

20101123
this is date: 11/23/2010

我正在寻找从数字到日期字段转换的最佳方式。

以下是我提出的建议:

declare @ymd int

set @ymd = 20101122

select @ymd, convert(datetime, cast(@ymd as varchar(100)), 112)

这是非常好的解决方案,但如果有人有更好的方法,我就会徘徊

4 个答案:

答案 0 :(得分:4)

试试这个:

CONVERT(DATETIME, CONVERT(NVARCHAR, YYYYMMDD))

例如:

SELECT CONVERT(DATETIME, CONVERT(NVARCHAR, 20100401))

结果:

2010-04-01 00:00:00.000

答案 1 :(得分:2)

你所拥有的是一个非常好的解决方案。

你为什么要寻找更好的方法?

答案 2 :(得分:0)

我正好使用它,它一直很适合我

答案 3 :(得分:0)

因为它存储为整数,所以你可以通过除以100,1000来提取年,月和日。

e.g。

DECLARE @Date INT
SET @Date = 20100401

DECLARE @Year INT
DECLARE @Month INT
DECLARE @Day INT

SET @Year = @Date / 10000
SET @Month = (@Date - (@Year * 10000)) / 100
SET @Day = @Date - (@Year * 10000) - (@Month * 100)

SELECT @Date, DATEADD(MONTH,((@Year-1900)*12)+@Month-1,@Day-1)

但是,我不知道这是否比你已经拥有的字符串比较更快。我认为您的解决方案更清晰,更易于阅读并坚持使用。