从Oracle到Spark sql的查询转换

从Oracle到Spark sql的查询转换,oracle,apache-spark-sql,Oracle,Apache Spark Sql,下面是oracle SQL查询, 它必须使用_date()函数,并加上几天 select to_date('01.01.1960','dd.MM.yyyy') + (1767097320000000/1000000/3600/24) as ACTUAL, '2015-12-30 12:22:00' AS RESULT from DUAL 输出 ----------------------------------------------- | ACTUAL

下面是oracle SQL查询, 它必须使用_date()函数,并加上几天

select    
      to_date('01.01.1960','dd.MM.yyyy') + (1767097320000000/1000000/3600/24) as ACTUAL,
      '2015-12-30 12:22:00' AS RESULT
from DUAL
输出

-----------------------------------------------
| ACTUAL                | RESULT              |
----------------------------------------------|    
|2015-12-30 12:22:00    | 2015-12-30 12:22:00 |
-----------------------------------------------

      

我的目的是将上面的oracle查询
转换为spark SQL中的_date('01.01.1960','dd.MM.yyyy')+(176709732000000/1000000/3600/24)

这看起来与给定的日期时间格式相同

spark.sql("""
    SELECT 
        from_unixtime(unix_timestamp('01.01.1960', "dd.MM.yyyy") + (1767097320000000/1000000), "yyyy-MM-dd HH:mm:ss") as RESULT,
        '2015-12-30 12:22:00' as EXPECTED
""").show

+-------------------+-------------------+
|             RESULT|           EXPECTED|
+-------------------+-------------------+
|2015-12-30 12:22:00|2015-12-30 12:22:00|
+-------------------+-------------------+
我们必须将日期字符串
'1960-01-01 00:00:00'
转换为时间戳对象,然后强制转换为双精度类型

接下来,将毫秒
176709732000000/1000000
和日期相加为双精度值

最终值是一个双精度值,然后再次转换为时间戳

另一个解决方案


date\u格式(CAST(unix\u时间戳('1960-01-01 00:00:00')+(17670973200000/1000000)作为时间戳),“yyyy-MM-dd HH:MM:ss”)作为结果

Hi@lamanus我的问题是将oracle日期函数转换为spark SQL等效函数。不。我的意思是,我需要一个与Oracle queryPlease相同的工作查询。请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带有解释的答案通常更有帮助,质量更好,更有可能吸引更多的选票。@mark Rotterveel-在我的知识中添加了解释。我不知道Spark SQL。话虽如此,15秒的谷歌搜索显示Spark支持一个
TO_DATE()
函数,并且它有一个
DATE\u ADD()
函数来为输入日期添加天数。所以,我想知道您尝试了什么——因为我能够在不到一分钟的时间内找到您需要的所有东西,而不知道Spark SQL。请在问题中添加您尝试的内容,并解释您尝试失败的原因。
SELECT 

DATE_FORMAT(CAST(CAST(CAST(to_date('1960-01-01 00:00:00') AS TIMESTAMP) AS DOUBLE)+ (1767097320000000/1000000) AS TIMESTAMP), "yyyy-MM-dd HH:mm:ss") as RESULT

,'2015-12-30 12:22:00' as RESULT

from dual;