所以我在运行此查询的位是*旁边是即时通讯卡住的位置,我希望我的搜索仅显示昨天的日期,但是即使我知道昨天有数据,我的查询也没有返回结果,我无法使用日期,因为我希望我的脚本每天自动运行
06-JUL-18 09.49.53.000000000-这是日期在表上最初显示的内容,而在下面是表的desc,我放入substr(Creation_Timestamp,1,18)的原因是因为我仅想看一些日期和时间
CREATION_TIMESTAMP NOT NULL TIMESTAMP(6)
Select substr(Creation_Timestamp, 1, 18),
A.Message_Class,
A.Channel,
A.Data_Centre,
B.Line_Of_Business,
count(*)
From Payld_Data.Received_Messages A,
Recon_Data.Reconciliation_Control B
Where A.Conversation_Id = B.Conversation_Id
and a.message_class = 'IR-CIS-VERIFY-RESP'
**and Creation_Timestamp like sysdate -1**
group by substr(Creation_Timestamp, 1, 18),
A.Message_Class,
A.Channel,
A.Data_Centre,
B.Line_Of_Business;
答案 0 :(得分:2)
and Creation_Timestamp like sysdate -1
实际上与以下内容相同:
and Creation_Timestamp = TO_CHAR( sysdate -1, (SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_TIMESTAMP_FORMAT' ) )
这很可能包含小时,分钟,秒和小数秒部分,您的LIKE
条件将尝试匹配该部分。由于从昨天起没有确切的小时,分钟,秒和小数秒的值,因此您的查询将不会返回任何内容。
相反,您需要查询范围:
Select substr(Creation_Timestamp, 1, 18),
A.Message_Class,
A.Channel,
A.Data_Centre,
B.Line_Of_Business,
count(*)
From Payld_Data.Received_Messages A
INNER JOIN Recon_Data.Reconciliation_Control B
ON ( A.Conversation_Id = B.Conversation_Id )
Where a.message_class = 'IR-CIS-VERIFY-RESP'
and Creation_Timestamp >= TRUNC( sysdate ) - 1
and Creation_Timestamp < TRUNC( sysdate )
group by substr(Creation_Timestamp, 1, 18),
A.Message_Class,
A.Channel,
A.Data_Centre,
B.Line_Of_Business;
答案 1 :(得分:0)
因为您的列不是字符串,所以请忽略我以前的答案。
请尝试以下操作:
....
AND Creation_Timestamp >= TRUNC(sysdate-1)
AND Creation_Timestamp < TRUNC(sysdate)
....
此外,您应该使用substr(Creation_Timestamp, 1, 18)
或您喜欢的任何格式来代替TO_CHAR(Creation_Timestamp, 'DD-Mon-YY HH24:MI:SS')
。
在select
和group by
中都是如此。
答案 2 :(得分:0)
对两者使用相同的格式,并进行简单的字符串比较
AND TO_CHAR(Creation_Timestamp, ‘YYYYMMDD’) = TO_CHAR(Sysdate - 1, ‘YYYYMMDD’)
答案 3 :(得分:-1)
我相信问题在这里
and Creation_Timestamp **like** sysdate -1
like 运算符通常意味着将搜索包含某些内容的文本,就像您试图查找包含单词dog
的每个字符串一样:
where column_name like "%dog%"
因此,您应该选择=
或<
或<=
如果您确切想要昨天:
and Creation_Timestamp = sysdate -1
如果要在今天之前的所有时间
and Creation_Timestamp < sysdate
如果您要执行与上述类似的操作,但要说明sysdate-1
and Creation_Timestamp <= sysdate -1
编辑:由于我不确定时间戳的小时数将如何影响这种情况,因此我必须添加一些内容。我不知道是否可以像上面那样简单地工作,或者是否需要按如下所示的日期进行转换:
and CAST(Creation_Timestamp as date) < SYSDATE
答案 4 :(得分:-2)
如果您的Creation_Timestamp
是格式为DD-Mon-YY
的字符串,然后是时间,则应尝试以下操作:
....
AND Creation_Timestamp LIKE TO_CHAR(sysdate-1, 'DD-Mon-YY') || '%'
....
更新
由于列不是字符串,请忽略此答案。
我不会删除此评论,因为评论很重要