Oracle查询到SQL查询转换问题 [英] Oracle query to SQL query conversion issues
本文介绍了Oracle查询到SQL查询转换问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
Dear All,
can someone please help to convert the following oracle query to sql specific please.. as i am really struggling with that ..
SELECT "SAMPLE"."ID_NUMERIC",
"SAMPLE"."BATCH_NO",
"SAMPLE"."STATUS",
"SAMPLE"."RECD_DATE",
"SAMPLE"."DATE_AUTHORISED",
"SAMPLE"."TEMPLATE_ID",
"SAMPLE"."RELEASE_DATE",
"SAMPLE"."LOGIN_DATE",
"SAMPLE"."DATE_COMPLETED",
TRUNC((((86400 * (DATE_COMPLETED-RECD_DATE))/60)/60)/24) AS VC_Days,
TRUNC(((86400 * (DATE_COMPLETED-RECD_DATE))/60)/60) - (24 * (TRUNC((((86400 * (DATE_COMPLETED-RECD_DATE))/60)/60)/24))) AS VC_Hrs,
TRUNC((86400 * (DATE_COMPLETED-RECD_DATE))/60) - (60 * (TRUNC(((86400 * (DATE_COMPLETED-RECD_DATE))/60)/60))) AS VC_Min,
TRUNC(86400 * (DATE_COMPLETED-RECD_DATE)) - (60 * (TRUNC((86400 * (DATE_COMPLETED-RECD_DATE))/60))) AS VC_Sec,
TRUNC((((86400 * (RELEASE_DATE-RECD_DATE))/60)/60)/24) AS VR_Days,
TRUNC(((86400 * (RELEASE_DATE-RECD_DATE))/60)/60) - (24 * (TRUNC((((86400 * (RELEASE_DATE-RECD_DATE))/60)/60)/24))) AS VR_Hrs,
TRUNC((86400 * (RELEASE_DATE-RECD_DATE))/60) - (60 * (TRUNC(((86400 * (RELEASE_DATE-RECD_DATE))/60)/60))) AS VR_Min,
TRUNC(86400 * (RELEASE_DATE-RECD_DATE)) - (60 * (TRUNC((86400 * (RELEASE_DATE-RECD_DATE))/60))) AS VR_Sec,
TRUNC((((86400 * (DATE_AUTHORISED-DATE_COMPLETED))/60)/60)/24) AS CA_Days,
TRUNC(((86400 * (DATE_AUTHORISED-DATE_COMPLETED))/60)/60) - (24 * (TRUNC((((86400 * (DATE_AUTHORISED-DATE_COMPLETED))/60)/60)/24))) AS CA_Hrs,
TRUNC((86400 * (DATE_AUTHORISED-DATE_COMPLETED))/60) - (60 * (TRUNC(((86400 * (DATE_AUTHORISED-DATE_COMPLETED))/60)/60))) AS CA_Min,
TRUNC(86400 * (DATE_AUTHORISED-DATE_COMPLETED)) - (60 * (TRUNC((86400 * (DATE_AUTHORISED-DATE_COMPLETED))/60))) AS CA_Sec,
TRUNC((((86400 * (DATE_AUTHORISED-RECD_DATE))/60)/60)/24) AS VA_Days,
TRUNC(((86400 * (DATE_AUTHORISED-RECD_DATE))/60)/60) - (24 * (TRUNC((((86400 * (DATE_AUTHORISED-RECD_DATE))/60)/60)/24))) AS VA_Hrs,
TRUNC((86400 * (DATE_AUTHORISED-RECD_DATE))/60) - (60 * (TRUNC(((86400 * (DATE_AUTHORISED-RECD_DATE))/60)/60))) AS VA_Min,
TRUNC(86400 * (DATE_AUTHORISED-RECD_DATE)) - (60 * (TRUNC((86400 * (DATE_AUTHORISED-RECD_DATE))/60))) AS VA_Sec
FROM "SAMPLE"
MAzeem
我尝试了什么:
不知道如何将其转换为sql one
What I have tried:
not sure how to convert that to sql one
推荐答案
首先要了解VC_Days,VC_Hrs,VC_Min,VC_Secons是什么,并摆脱那些荒谬的计算。
It看起来你试图通过截断一个值来表示一些日期,如天,小时,分钟和秒(注意86400 = 60 * 60 * 24 - 即秒数在一天内)
如果没有看到一些示例数据和实际结果,我不会深入研究,但您可能需要的SQL函数是 DATEPART(Transact-SQL) - SQL Server Microsoft Docs [ ^ ]
您可能希望查看 DATEDIFF(Transact-SQL) - SQL Server Microsoft Docs [ ^ ]
首先证明它可以转换Oracle查询并比较结果 - 还有< a href =https://docs.oracle.com/cd/E57185_01/ESBTR/mdx_datepart.html> DatePart [ ^ ]和 DATEDIFF [ ^ ]
First understand what VC_Days, VC_Hrs, VC_Min, VC_Secons are and get rid of those ridiculous calculations.
It appears that you are trying to express some dates as days, hours, minutes and seconds by truncating a value (note that 86400 = 60 * 60 * 24 - i.e. the number of seconds in a day)
Without seeing some sample data and the actual results I'm not going to go into great depth but the SQL function you probably need is DATEPART (Transact-SQL) - SQL Server | Microsoft Docs[^]
At a push you might want to look at DATEDIFF (Transact-SQL) - SQL Server | Microsoft Docs[^]
To prove it first you could convert the Oracle query and compare results - there is also DatePart[^] and DATEDIFF[^] in Oracle
首先为所有这些重复计算创建一个FUNCTION。
注意常量和变量(参数)。
Start by creating a FUNCTION for all those duplicate calculations.
Note the constants and variables (parameters).
这篇关于Oracle查询到SQL查询转换问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文