db2数据库上的sql查询
我正在使用此查询:db2数据库上的sql查询,sql,db2,Sql,Db2,我正在使用此查询: select substr("Message_Time",6,2) || '/' || substr("Message_Time",4,2) || '/' || '20'|| substr("Message_Time",2,2) || substr("Message_Time",8,2) || ':' || substr("Message_Time",10,2) as "Date", count(*) as "Fault", "Message_Location"
select substr("Message_Time",6,2) || '/' || substr("Message_Time",4,2) || '/' || '20'|| substr("Message_Time",2,2) || substr("Message_Time",8,2) || ':' || substr("Message_Time",10,2) as "Date",
count(*) as "Fault", "Message_Location", "Service_Name_U", "Operation_Name_U", "Port_Namespace_U",
"Error_Code_U", "Error_SubCode_U", "Fault_Code_U", "Fault_String_U",
"Requester_Identity", "Application_ServerName_U"
from "Fault_Log_Table_610"
where "Message_Time" >= 1181016220000000 and "Message_Time" < 1181017220000000 and
"Operation_Name_U" = 'getDomandeDisabile'
group by substr("Message_Time", 6, 2) || '/' || substr("Message_Time", 4, 2) || '/' || '20'|| substr("Message_Time", 2, 2) || substr("Message_Time",8,2) || ':' || substr("Message_Time",10,2),
"Service_Name_U", "Operation_Name_U", "Error_Code_U", "Error_SubCode_U", "Message_Location", "Fault_Code_U", "Fault_String_U",
"Port_Namespace_U", "Requester_Identity", "Application_ServerName_U"
我需要添加2小时到日期字段,换句话说,我需要将数字2添加到substrMessage_Time,8,2
日期的格式为1181020164532000,其中:
第一个数字是世纪
接下来的两个数字是年份
接下来的两个数字是月份
接下来的两个数字是天数
接下来的两个数字是小时数
接下来的两个数字是分钟
最后三个数字是毫秒,我将预先计算时间戳解析,然后在CTE公共表表达式中添加2小时 然后我将在您想要的查询中使用这个即用数据。比如:
with x as (
select
timestampadd(8, 2, -- add 2 hours
timestamp_format( -- parse the VARCHAR into a TIMESTAMP
'20' || substr("Message_Time",2,15) || '000',
'YYYYMMDDHHMISSNNNNNN')
) as "Date",
"Message_Location", "Service_Name_U",
"Operation_Name_U", "Port_Namespace_U",
"Error_Code_U", "Error_SubCode_U", "Fault_Code_U", "Fault_String_U",
"Requester_Identity", "Application_ServerName_U"
from "Fault_Log_Table_610"
where "Message_Time" >= 1181016220000000
and "Message_Time" < 1181017220000000
and "Operation_Name_U" = 'getDomandeDisabile'
)
select
"Date",
count(*) as "Fault",
"Message_Location", "Service_Name_U",
"Operation_Name_U", "Port_Namespace_U",
"Error_Code_U", "Error_SubCode_U", "Fault_Code_U", "Fault_String_U",
"Requester_Identity", "Application_ServerName_U"
from x
group by "Date",
"Service_Name_U", "Operation_Name_U", "Error_Code_U", "Error_SubCode_U",
"Message_Location", "Fault_Code_U", "Fault_String_U",
"Port_Namespace_U", "Requester_Identity", "Application_ServerName_U"
将时间戳存储为时间戳值。不要使用VARCHAR。如果你使用VARCHAR,你会遇到很多问题。所以它会分解为:1-18-10-20-16-45-32-000?Century 1?或在表上创建一个视图,该视图将转换为时间戳,前提是首先要将列更改为时间戳需要花费太多的精力。您甚至可以让它生成一个列,或一个函数索引来帮助查询performance@PaulVernon我同意。对于这种情况,生成的列将非常有效。