Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 合并日期和时间列问题_Sql Server - Fatal编程技术网

Sql server 合并日期和时间列问题

Sql server 合并日期和时间列问题,sql-server,Sql Server,使用SQLServer2005 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, DATEDI

使用SQLServer2005

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查询帮助吗首先,为什么要在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

几年前,我在导入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