объединить проблему столбца даты и времени - PullRequest
2 голосов
/ 07 декабря 2009

Использование 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 ]

2 голосов
/ 07 декабря 2009

Я сталкивался с подобной проблемой несколько лет назад при импорте сообщений HL7. Вот копия функции, которую я использовал. Он создает строку DateTime с компонентом времени, правильно разделенным на чч: мм: сс, который необходим для преобразования в 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
2 голосов
/ 07 декабря 2009

Прежде всего, почему вы храните DATETIME в VARCHAR?

Это должно помочь

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...