2009-12-07 67 views
2

使用SQL Server 2005結合日期和時間列問題

Date Time 

20060701 090000 
20060702 020000 
20060703 180000 
... 

日期和時間數據類型爲varchar

試圖查詢

select Convert(datetime, Convert(char(10), date, 103) + ' ' + Convert(char(8), time, 108), 103) from table 
SELECT 
CAST(
     DATEADD(dd, 0, DATEDIFF(dd, 0, date)) + ' ' + 
     DATEADD(Day, -DATEDIFF(Day, 0, time), time)     
as datetime) from table 

它顯示爲超出範圍值的誤差。

如何解決這個問題。

需要SQL查詢幫助

回答

2

首先,你爲什麼要存儲在VARCHAR一個DATETIME?

這應該能夠幫助

DECLARE @Table TABLE(
     Val VARCHAR(20) 
) 

INSERT INTO @Table (Val) SELECT '20060701 090102' 
INSERT INTO @Table (Val) SELECT '20060702 020000' 
INSERT INTO @Table (Val) SELECT '20060703 180000' 

SELECT *, 
     CAST(SUBSTRING(Val,1,8) + ' ' + SUBSTRING(Val,10,2) + ':' + SUBSTRING(Val,12,2) + ':' + SUBSTRING(Val,14,2) AS DATETIME) 

FROM @Table 
2

我遇到了類似的問題,幾年前來到,進口HL7消息時。這是我使用的功能的副本。它會創建一個DateTime字符串,並將時間組件正確分隔爲hh:mm:ss,這對於轉換爲DateTime需要。

CREATE FUNCTION fn_StringDateTietoDateTime 
(
    @Date varchar(15) 
) 
RETURNS datetime 
AS 
BEGIN 
    DECLARE @Result DATETIME 

    SET @Result = NULL 

    If len(@Date) > 0 
    BEGIN 
     SELECT @Result = CAST(SUBSTRING(@hl7date, 1, 8) + ' ' + SUBSTRING(@hl7date, 10, 2) + ':' + 
      SUBSTRING(@date, 12, 2) + ':' + SUBSTRING(@date,14, 2) AS DATETIME) 
    END 

    RETURN @RESULT 
END