我的任务是通过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/