私の仕事は、ABAPスタイル日付(つまり、20171120という文字列を20171120で表す)をHANA日付に変換することです。 SQLスクリプト。これは簡単にして行うことができます。SAP HANA:空の日付にnull値を保持するsqlscriptを使用してabap日付をhana日付に変換します
select to_date('20171120','YYYYMMDD') from dummy;
しかし、別の要件があります:ABAPの日付が初期であれば(値「00000000」)データベースがnull値を格納するものとします。私は実用的なソリューションを発見した:私は「Z」との潜在的な初期日付を「00000000」を置換し、唯一「Z」が発見された場合はnullに文字列をトリム:
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
しかし、これは汚いハックのように見えます。より洗練されたソリューションのアイデアは誰かありますか?
Eclipseでは、内部値 '-1-12-31'は '?'として表示され、nullと同じです。 "select ... where field is null"の場合のみ、その違いを見ることができます。そうです、DATS_TO_DATEはnullを返しません。 – Psio
良い点!特別な日付の値がクライアント(この場合はJDBC)に転送されると、NULL値への変換が実際に行われます。クライアントソフトウェアは、有効なJava日付型にマップされます。これはヌル値の日付です。 –
特別な "INITIAL"日付を使用すると、その列のNULL値を避けることができます。列ストア表の場合、このINITIAL日付に必要なスペースは増えませんが、潜在的なNULL値に対応するために追加のロジックを考慮する必要なくSQL文を操作できるようになりました。結局のところ、この値を保持したいかもしれません。 –