【问题标题】:Convert SQL Server query to Oracle equivalent将 SQL Server 查询转换为 Oracle 等效查询
【发布时间】:2021-01-21 05:44:10
【问题描述】:

有人可以帮我将以下 SQL Server 查询转换为他们的 Oracle 等效查询吗?

另外,我无法理解查询的功能。

select 
    [sco_nm], count(1) as cnt 
from 
    (select 
         [sco_nm], DATEADD(dd, 0, DATEDIFF(dd, 0, [TIME_CREATED])) as DATE_CREATED
     from 
         [dbo].[sc_sm_res]
     group by 
         [sco_nm], DATEADD(dd, 0, DATEDIFF(dd, 0, [TIME_CREATED]))) as rec   
group by 
    [sco_nm]

   
SELECT 
    CAST(GETDATE() AS datetime2(0)) AS CURR, 
    [SC_SM], [PF_VSR_K], [PF_RN_K]
FROM 
    [dbo].[sc_sm_res]

我尝试查看其他一些帖子,但无法理解其功能。

【问题讨论】:

  • 我删除了不一致的标签
  • 你需要试一试!否则你只是让我们为你做你的工作。
  • 谢谢@DaleK,是的,我会的,我需要处理很多问题,但稍微提升一下会有帮助,不是吗? :)

标签: sql-server oracle


【解决方案1】:

据我所知,子查询中不需要分组,甚至不需要子查询。你可以使用trunc如下:

select sco_nm, count(distinct trunc(TIME_CREATED)) as cnt 
  from sc_sm_res rec 
 group by sco_nm

第二个查询:

SELECT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as CURR, 
       SC_SM
      ,PF_VSR_K
      ,PF_RN_K
  FROM sc_sm_res

【讨论】:

  • 这里不需要替换dateadd和datediff吗?另外,有两个查询需要 oracle 版本。
  • DATEADD(dd, 0, DATEDIFF(dd, 0, [TIME_CREATED])) in sql server 等于 trunc(time_created) in oracle
  • 谢谢。很高兴知道!另外,你能回复第二个问题吗?
  • 也用第二个查询更新了答案
  • 非常感谢@Popeye——这应该让我继续前进。我还阅读并发现这个 DADD 只是从日期中删除时间部分。
猜你喜欢
  • 2016-07-29
  • 1970-01-01
  • 2020-07-09
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
相关资源
最近更新 更多