Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 Informix-合并日期和时间字段_Sql Server_Informix - Fatal编程技术网

Sql server Informix-合并日期和时间字段

Sql server Informix-合并日期和时间字段,sql-server,informix,Sql Server,Informix,我们从informix表接收这种格式的数据 Run Date Run Time 2017-05-22 0 2017-05-22 100 2017-05-22 200 2017-05-22 300 2017-05-22 400 预期产出: 2017-05-22 04:00 我想把两者结合起来得到日期时间,这样就可以进行操作了。请帮忙 ;With Cte(RunDate,RunTime) AS ( SELECT

我们从informix表接收这种格式的数据

Run Date        Run Time
2017-05-22        0
2017-05-22        100
2017-05-22        200
2017-05-22        300
2017-05-22        400
预期产出:

2017-05-22 04:00
我想把两者结合起来得到日期时间,这样就可以进行操作了。请帮忙

;With Cte(RunDate,RunTime)
AS
(
SELECT '2017-05-22',0   UNION ALL
SELECT '2017-05-22',100 UNION ALL
SELECT '2017-05-22',200 UNION ALL
SELECT '2017-05-22',300 UNION ALL
SELECT '2017-05-22',400
)

SELECT CONCAT( RunDate,' ',ISNULL(STUFF(Right('0' + CAST(RunTime AS VARCHAr(10)),6),3,LEn(RunTime),''),'00')+' : 00')Expected from Cte
预期产量

2017-05-22 00 : 00
2017-05-22 01 : 00
2017-05-22 02 : 00
2017-05-22 03 : 00
2017-05-22 04 : 00
预期产量

2017-05-22 00 : 00
2017-05-22 01 : 00
2017-05-22 02 : 00
2017-05-22 03 : 00
2017-05-22 04 : 00

该问题没有确定运行日期和运行时值的列类型。然而,运行日期的合理类型是date、DATETIME YEAR TO DAY和CHAR(10);运行时的合理类型是INTEGER和CHAR(4)。对于本练习,INTEGER和SMALLINT、CHAR(n)和VARCHAR(n)之间没有区别,您可以(但不应该)在运行时使用十进制。适当指定的问题可以避免这些问题

幸运的是,这没有多大关系——相同的基本SQL代码处理上述所有变体——尽管您可能需要为一些更受排斥的类型组合添加更多强制转换

此代码假定您在环境中设置了
DBDATE=“Y4MD-”
或等效设置;如果对
$DBDATE
使用日期列和不同的值,则必须进行更改

日期加整数 字符加字符 示例输出


在大多数情况下,Informix非常擅长在类型之间进行自动转换——这里需要转换为
DATE
(可以改为
DATETIME-YEAR-to-DAY
)是必需的,因为当考虑将
run\u date
作为
DATETIME
时,优化器不知道要使用多少
DATETIME
子类型。(好:所以“myriad”是一个夸张的说法。有56个不同的
DATETIME
子类型和其中一些类型的7个同义词。)

问题没有确定运行日期和运行时间值的列的类型。然而,运行日期的合理类型是date、DATETIME YEAR TO DAY和CHAR(10);运行时的合理类型是INTEGER和CHAR(4)。对于本练习,INTEGER和SMALLINT、CHAR(n)和VARCHAR(n)之间没有区别,您可以(但不应该)在运行时使用十进制。适当指定的问题可以避免这些问题

幸运的是,这没有多大关系——相同的基本SQL代码处理上述所有变体——尽管您可能需要为一些更受排斥的类型组合添加更多强制转换

此代码假定您在环境中设置了
DBDATE=“Y4MD-”
或等效设置;如果对
$DBDATE
使用日期列和不同的值,则必须进行更改

日期加整数 字符加字符 示例输出


在大多数情况下,Informix非常擅长在类型之间进行自动转换——这里需要转换为
DATE
(可以改为
DATETIME-YEAR-to-DAY
)是必需的,因为当考虑将
run\u date
作为
DATETIME
时,优化器不知道要使用多少
DATETIME
子类型。(好的:“myriad”是一个夸张的说法。有56个不同的
DATETIME
子类型,其中一些类型有7个同义词。)

Informix或SQL Server?您的问题非常不清楚。预期输出的问题“运行时”是什么意思?您应该为每行添加预期的输出。这两列有什么类型?它们是弦吗?或者一个是日期还是日期时间,另一个是整数?还是别的什么?Informix还是SQL Server?您的问题非常不清楚。预期输出的问题“运行时”是什么意思?您应该为每行添加预期的输出。这两列有什么类型?它们是弦吗?或者一个是日期还是日期时间,另一个是整数?或者别的什么?不清楚是否需要冒号周围的空格,尽管它们很容易被消除。还不完全清楚运行时是否总是在小时(最后两位数字00),尽管我承认示例数据肯定总是有零(但如果它们总是零,为什么还要麻烦它们呢?)。不清楚是否需要冒号周围的空格,尽管它们很容易被消除。还不完全清楚运行时是否总是在小时(最后两位数字00),尽管我承认示例数据肯定总是有零(但是如果它们总是零,为什么还要麻烦它们呢?)。
run_date    run_time    run_date_time
DATE        INTEGER     DATETIME YEAR TO MINUTE
2017-05-22  0           2017-05-22 00:00
2017-05-22  100         2017-05-22 01:00
2017-05-22  200         2017-05-22 02:00
2017-05-22  300         2017-05-22 03:00
2017-05-22  400         2017-05-22 04:00
DROP TABLE IF EXISTS rd_rt_char_char;
CREATE TABLE rd_rt_char_char
(
    run_date    CHAR(10) NOT NULL
                CHECK (run_date MATCHES '[0-9][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9]'),
    run_time    CHAR(4) NOT NULL,
    PRIMARY KEY(run_date, run_time)
);

INSERT INTO rd_rt_char_char VALUES('2017-05-22', '0');
INSERT INTO rd_rt_char_char VALUES('2017-05-22', '100');
INSERT INTO rd_rt_char_char VALUES('2017-05-22', '200');
INSERT INTO rd_rt_char_char VALUES('2017-05-22', '300');
INSERT INTO rd_rt_char_char VALUES('2017-05-22', '400');

SELECT run_date, run_time,
       EXTEND(run_date::DATE, YEAR TO MINUTE) +
       MOD(run_time, 100) UNITS MINUTE +
       (run_time / 100) UNITS HOUR AS run_date_time
  FROM rd_rt_char_char;
run_date    run_time    run_date_time
CHAR(10)    CHAR(4)     DATETIME YEAR TO MINUTE
2017-05-22  0           2017-05-22 00:00
2017-05-22  100         2017-05-22 01:00
2017-05-22  200         2017-05-22 02:00
2017-05-22  300         2017-05-22 03:00
2017-05-22  400         2017-05-22 04:00