如果空为空,则将ABAP日期转换为HANA日期返回null



我的任务是将ABAP样式日期转换为" 2017-11-20",该日期以字符串为字符串" 20171120")通过SQL脚本转换为HANA日期。这可以通过以下方式轻松完成:

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

,但还有另一个要求:如果ABAP日期是初始(值'00000000'),则数据库应存储空值。我找到了一个有效的解决方案:我用" z"替换潜在的初始日期" 00000000",然后将字符串修剪为null,如果找到'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

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

正如我与SAP HANA的演示创新中所解释的 - 我的选择是什么。

相反,在处理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的输出表示形式。

dats_to_date do 如果给定日期是初始日期(0000-00-00),则返回null,而是特殊的日期值(-1-12-31 to精确)。

在这种情况下,按照您的要求接收零值,请使用以下语句:

nullif(dats_to_date(?),dats_to_date('00000000'))

e。g。:

插入null_test值(nullif(dats_to_date('00000000'),dats_to_date('00000000'')));=>返回null

插入null_test值(nullif(dats_to_date('20171224'),dats_to_date('00000000'')));=>返回2017-12-24

由于不涉及乏味的字符串操作,因此该语句应产生良好的性能。

相关内容

  • 没有找到相关文章

最新更新