date - 将 ABAP 日期转换为 HANA 日期,如果为空则返回 NULL

标签 date null abap hana hana-sql-script

我的任务是通过sql脚本将ABAP样式日期(即2017-11-20表示为字符串“20171120”)转换为HANA日期。这可以通过以下方式轻松完成:

select to_date('20171120','YYYYMMDD') from dummy;

但还有另一个要求:如果 abap 日期是初始日期(值“00000000”),则数据库应存储空值。我找到了一个可行的解决方案:我将潜在的初始日期“00000000”替换为“Z”,如果仅找到“Z”,则将字符串修剪为空:

select to_date(trim(leading 'Z' from replace('00000000','00000000','Z')),'YYYYMMDD') from dummy;
-- result: null
select to_date(trim(leading 'Z' from replace('20171120','00000000','Z')),'YYYYMMDD') from dummy;
-- result: 2017-11-20

但这看起来像是一个肮脏的黑客行为。有人有更优雅的解决方案吗?

最佳答案

正如我的演示中所解释的 Innovation with SAP HANA - What are my options所有这些字符串操作实际上都是不必要的。

相反,在处理 ABAP 日期和时间数据时,请使用适当的转换函数。在本例中,DATS_TO_DATE 是正确的函数。

with in_dates as
(            select '20171120' as in_date from dummy
  union all  select '00000000' as in_date from dummy)

select 
        dats_to_date(in_date)
      , in_date 
from in_dates;


|DATS_TO_DATE(IN_DATE)   |IN_DATE 
-------------------------+---------
|2017-11-20              |20171120
|?                       |00000000

这里的?NULL的输出表示。

关于date - 将 ABAP 日期转换为 HANA 日期,如果为空则返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47401363/

相关文章:

abap - ABAP 中 MOVE 和 = 赋值之间的性能差异

abap - 类型池或常量类?

Spring java.util.Date bean

c++ - 我收到错误 "invalid null pointer"

MySQL:返回带有 NULL 或 0 Vales 的计数 (*)

javascript - 在 Javascript 中按日期和时间对对象数组进行排序时出现问题 - 允许空值

javascript - 比较不同年份的两个日期

java - 在指定日期执行 Java Swing 操作

r - 检查日期是否在R中的两个日期之间

abap - 检查语句中的 IN 运算符