我有遗留系统,其中所有日期字段都以YMD格式维护。例如:
20101123
this is date: 11/23/2010
我正在寻找从数字到日期字段转换的最佳方式。
以下是我提出的建议:
declare @ymd int
set @ymd = 20101122
select @ymd, convert(datetime, cast(@ymd as varchar(100)), 112)
这是非常好的解决方案,但如果有人有更好的方法,我就会徘徊
答案 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)
但是,我不知道这是否比你已经拥有的字符串比较更快。我认为您的解决方案更清晰,更易于阅读并坚持使用。