我在where子句中使用日期格式时遇到问题,而相同的格式设置适用于其他选择查询。
使用where子句中的以下条件进行查询:
select t1.x,t1.y,t2.z
from t1
inner join t2
where
TIMESTAMP(SUBSTR(20||t1.TRANSACTION_DATE,1,4)||'-'||SUBSTR(t1.TRANSACTION_DATE,3,2)||'-'||SUBSTR(t1.TRANSACTION_DATE,5,2)||' '||SUBSTR(t1.TRANSACTION_TIME,1,2)||':'||SUBSTR(t1.TRANSACTION_TIME,3,2)||':'||SUBSTR(t1.TRANSACTION_TIME,5,2))
BETWEEN '2018-06-01 00:00:00' AND '2018-06-18 12:01:00';
当相同的查询用于t1表和t3表时,如:
select t1.x,t1.y,t3.z
from t1
inner join t3
where
TIMESTAMP(SUBSTR(20||t1.TRANSACTION_DATE,1,4)||'-'||SUBSTR(t1.TRANSACTION_DATE,3,2)||'-'||SUBSTR(t1.TRANSACTION_DATE,5,2)||' '||SUBSTR(t1.TRANSACTION_TIME,1,2)||':'||SUBSTR(t1.TRANSACTION_TIME,3,2)||':'||SUBSTR(t1.TRANSACTION_TIME,5,2))
BETWEEN '2018-06-01 00:00:00' AND '2018-06-18 12:01:00';
它不适用于时间戳部分。
注意:表t1中的Transaction_date值为'180618'格式(yymmdd)。 transaction_time也是123030(hhmmss)格式
答案 0 :(得分:1)
您的时间戳值有误。您正在尝试计算201806-06-18 12:30:30的时间戳。那是行不通的。
在每个查询中将SUBSTR(20||t1.TRANSACTION_DATE,1,4)
更改为SUBSTR(20||t1.TRANSACTION_DATE,1,2)
。
或者您可以用
替换整个长子字符串timestamp_format(digits(t1.transaction_date) || digits(t1.transaction_time), 'YYMMDDHH24MISS')