在SQL Server 2005中将拆分日期转换为日期时间值的最有效方法是什么?

时间:2014-02-03 20:00:15

标签: sql-server-2005 datetime

我正在尝试使用视图将两个SQL Server 2005数据库绑定在一起。源数据库将日期拆分为三个int字段。

RecordId | RecordYear | RecordMonth | RecordDay
-----------------------------------------------
000001   | 2001       | 1           | 26
000002   | 2002       | 3           | 10

我的目标是使用日期的单个日期时间字段创建一个更易于使用的视图,如下所示。

RecordId | RecordDate
---------------------
000001   | 2001/01/26
000002   | 2002/03/10

完成此任务的最有效方法是什么?

现在,我将每个列作为varchar进行转换,将它们与斜杠分隔符连接起来,然后将完整的varchar作为日期时间进行转换。我觉得有一种更有效的方式。

cast(
    cast(RecordYear as varchar) + '/' + 
    cast(RecordMonth as varchar) + '/' + 
    cast(RecordDay as varchar) 
    as datetime
) as RecordDate

1 个答案:

答案 0 :(得分:2)

不,不要转换为字符串,definitely not to varchar without length

尝试:

DECLARE @x TABLE
(
  RecordId    CHAR(6) PRIMARY KEY, 
  RecordYear  INT, 
  RecordMonth INT, 
  RecordDay   INT
);

INSERT @x VALUES('000001',2001,1,26);
INSERT @x VALUES('000002',2002,3,10);

SELECT 
  RecordId, 
  RecordDate = DATEADD(DAY, RecordDay-1, 
      DATEADD(MONTH, RecordMonth-1, 
        DATEADD(YEAR, RecordYear-1900, '19000101'
      )))
FROM @x
ORDER BY RecordId;

结果:

RecordId  RecordDate
--------  ----------
000001    2001-01-26
000002    2002-03-10