Oracle查询到SQL查询转换问题 [英] Oracle query to SQL query conversion issues

查看:82
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆