čtvrtek 17. června 2010

Konverze string na date nebo timestamp

Někdy je nutné získat datum z „nestandardního“ textového řetězce a použít ho přímo ve filtru nebo ve výpočtu.

Příklad: Potřebujeme zobrazit data za předchozích 24 měsíců od měsíce ‘2009/01‘.
Jde o jednoduchý filtr, kde čas chceme omezit na pomocí:
  1. Konverze string na datum
  2. Odpočítání 24 měsíců.
Konverze:
V databázi Oracle by bylo použití triviální to_date('2009/01', 'YYYY/MM') nebo to_timestamp('2009/01', 'YYYY/MM').

OBI EE přímo poskytuje jenom dvě možnost jak vytvořit z textu datum nebo timestamp a to pomocí funkcí:
  1. DATE 'YYYY-MM-DD HH:MM:SS' a TIMESTAMP ' YYYY-MM-DD HH:MM:SS'
  2. CAST ('nls_date_format' as date) a CAST (' nls_timestamp_format' as timestamp)
Čili, vstupní řetězec v prvním případě nelze použít, protože není ve formátu YYYY-MM a v druhém případě nevíme, jak jsou nls formáty nastaveny.

V případě použití funkce date a timestamp není možné jako parametr předat další funkci, které by třeba provedla nahrazení '-' za '/' a proto se jednoduchá konverze na datum komplikuje.

Workaround:
Použití nativní databázové funkce volané pomocí evaluate (více viz. dokument Oracle BI Server and Embedded DB Functions):

cast(evaluate('add_months(to_date(''@{mesic}{2010/01}/01'',''YYYY/MM/DD''),-24)' as date) as date)


Karel Hübl (GEM System International)

Žádné komentáře: