显示创建视图中两个时间戳的正确减法
通过在两个时间戳之间使用正常减号' - '函数,从oracle给出的答案不正确。显示创建视图中两个时间戳的正确减法
这就是我想要做的:
ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='DD-MON-RR HH24:MI TZR';
创建表:
CREATE TABLE TEST (
StartTime timestamp with time zone
,EndTime timestamp with time zone
,Science varchar2(7)
);
我创建列数据类型与时区的时间戳。这是我值已插入:
INSERT INTO TEST
VALUES('05-OCT-2013 01:00 +08:00'
,'05-OCT-2013 23:00 +06:00'
,'SCIENCE');
INSERT INTO TEST
VALUES('05-OCT-2013 12:00 +08:00'
,'05-OCT-2013 15:00 -12:00'
,'Maths');
试图四舍五入时间:
CREATE VIEW TESTRECRDS AS
SELECT (Extract(hour FROM(ENDTIME- STARTTIME)) || 'Hours' ||
Extract(minute FROM(ENDTIME- STARTTIME))>=60 Then (Extract(hour FROM(ENDTIME- STARTTIME)) + Extract(minute FROM(ENDTIME- STARTTIME))/60 ELSE 0 END || 'Minutes' AS DURATION,
Science
FROM Test;
现在我有一个关于在计算和四舍五入分钟至最近的小时两个问题。 首先,让我们说,结束时间为1535 0600,并开始时间是01:50 +0800 所以当我扣结束时间 - 开始时间: 的公式应该是:
2135 - 0950 = 2085 - 0950
= 1135
但是,如果我用我的成功尝试的答案来计算,这不是正确的确切答案。甲骨文的答案将是15小时45分钟。
在你的最后CREATE VIEW
声明试图乘text
,这不能工作:
SELECT To_Char(STARTTIME - ENDTIME, 'HH24:MI TZR')*24 AS DURATION
*24
是在文本to_char()
返回操作。 您必须将之间的间隔乘以才能转换为文本。
您定义列Science varchar2(6)
,然后插入'SCIENCE'
,有7个字母的单词?
我还修复了INSERT语句中的语法错误:缺少'
。
关于您的评论:?
“我想创造我的表的过程中插入带时区的时间戳会日期型数据不要太
阅读data types in the manual
数据类型date
。不包括时区信息
如果通过“时区差异”您的意思是时间差一个改性剂,用这个来计算:
这里SELECT EXTRACT(timezone_hour FROM STARTTIME) AS tz_modifier FROM tbl
关键词是timezone_hour
是timezone_minute
。阅读more in the manual。
但请注意,这些数字取决于夏令时和其他恶作剧。很不确定的领土!
得到它漂亮的格式 - 例如:
SELECT to_char((EXTRACT (timezone_hour FROM STARTTIME) * 60
+ EXTRACT (timezone_minutes FROM STARTTIME))
* interval '1 min', 'HH:MI')
在PostgreSQL,你将有更简单的EXTRACT (timezone FROM STARTTIME)
,但我不认为Oracle支持。现在不能测试。
下面是一个简单的演示,你怎么能舍几分钟到几小时:
SELECT EXTRACT(hour FROM (ENDTIME - STARTTIME))
+ CASE WHEN EXTRACT(minute FROM (ENDTIME - STARTTIME)) >= 30 THEN 1 ELSE 0 END
FROM Test;
好吧从我的发言中我创建了这个: SELECT To_Char((STARTTIME - ENDTIME)* 24,'HH24:MI TZR')AS DURATION 但是我真正想要的是计算时区差异并仅填充小时数。 – JLearner
@ user976050:请定义'时区差异'和'填充小时数'。我试图理解,但失败。最好的编辑例子到你的问题,结果应该是什么样子。这会帮助大家理解。 –
您好我已经更新了我插入的表并创建了表。对于我最新的解决方案,我可以计算开始时间和结束时间之间的不同时间戳。但是,它不能帮助我计算时区差异。 Oracle能够计算时区差异吗?并添加到持续时间。 – JLearner
我不知道你想什么数字来计算,但是当你在Oracle中减去两个日期,你会得到以天为单位的日期之间的差值,而不是一个DATE
数据类型
SELECT TO_DATE('2011-01-01 09:00', 'yyyy-mm-dd hh24:mi') -
TO_DATE('2011-01-01 08:00', 'yyyy-mm-dd hh24:mi') AS diff
FROM dual
DIFF
----------
.041666667
在这种情况下,上午8点和上午9点相距0.41667天。这不是一个日期对象,这是一个标量数字,因此格式化为HH24:MI没有任何意义。
没有做这个(据我所知)数据类型 - 有什么坏处使用'DATE数据类型,如果你只想从它的时区? –
好的,我想在创建我的表的过程中插入带时区的时间戳。 DATE数据类型也可以这样做吗? – JLearner
@ user976050:否。日期数据类型不包含时区。想想看。 “日期”与时区无关。 –