2010-05-06 177 views
1

我有一个遗留系统,其中所有日期字段都以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

最优化已经意味着最多。:p – 2010-05-06 13:29:24

回答

4

试试这个:

CONVERT(DATETIME, CONVERT(NVARCHAR, YYYYMMDD)) 

例如:

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

结果:

2010-04-01 00:00:00.000 
+0

这看起来比我的效率更高,它看起来也更好。谢谢! – IMHO 2010-05-06 14:06:07

+1

为什么使用NVARCHAR? char(8)会更有效率。 – 2010-05-06 17:51:46

+0

有趣的扭曲 - 这不工作作为计算场的公式 - 任何想法? – IMHO 2010-05-07 18:31:09

2

你有什么是一个相当不错的soltuion。

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

+0

因为我有一些行要转换 - 我正在寻找最快的方式来做到这一点。这是不寻常的吗? – IMHO 2010-05-06 14:05:04

+0

@IMHO:一百万行的日期部分转换应该花费不到一秒;) – Andomar 2010-05-06 14:23:07

0

我使用完全相同的是,它一直致力于为我好

0

因为它被存储为一个整数然后哟你可以通过除以100,1000来提取年,月和日。

例如,

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)[email protected],@Day-1) 

但是,我不知道这是否比你已经有的字符串比较更快。我认为你的解决方案更简洁易读,并且坚持这一点。

相关问题