sql >> Databáze >  >> RDS >> Oracle

Funkce TO_DSINTERVAL() v Oracle

V databázi Oracle, TO_DSINTERVAL() funkce převede svůj argument na hodnotu INTERVAL DAY TO SECOND datový typ.

Syntaxe

Syntaxe vypadá takto:

TO_DSINTERVAL ( ' { sql_format | ds_iso_format } ' 
  [ DEFAULT return_value ON CONVERSION ERROR ] )

Máte tedy možnost předat argument ve formátu SQL nebo ISO.

Zde je rozdíl:

  • sql_format je formát intervalů SQL kompatibilní se standardem SQL (ISO/IEC 9075).
  • ds_iso_format je formát trvání ISO kompatibilní se standardem ISO 8601:2004.

Syntaxe pro sql_format vypadá takto:

[+ | -] days hours : minutes : seconds [. frac_secs ]

Kde:

  • days je celé číslo mezi 0 a 999999999
  • hours je celé číslo mezi 0 a 23
  • minutes a seconds jsou celá čísla mezi 0 a 59
  • frac_secs je zlomková část sekund mezi 0,0 a 0,999999999.
  • Jedna nebo více mezer odděluje dny od hodin. Mezi prvky formátu jsou povoleny další mezery.

A syntaxe pro ds_iso_format :

[-] P [days D]
  [T [hours H] [minutes M] [seconds [. frac_secs] S ] ]

Kde:

  • days , hours , minutes a seconds jsou celá čísla mezi 0 a 999999999.
  • frac_secs je zlomková část sekund mezi 0,0 a 0,999999999.
  • V hodnotě nejsou povoleny žádné mezery.
  • Pokud zadáte T , pak musíte zadat alespoň jednu z hours , minutes nebo seconds hodnoty.

Příklady

Zde je několik příkladů k demonstraci.

Formát SQL

Zde předám argument ve formátu SQL:

SELECT TO_DSINTERVAL('135 08:35:47.123456789')
FROM DUAL;

Výsledek:

+135 08:35:47.123456789

V případě potřeby jej můžeme předřadit jeho znaménkem. Překlopíme to do záporu:

SELECT TO_DSINTERVAL('-135 08:35:47.123456789')
FROM DUAL;

Výsledek:

-135 08:35:47.123456789

Formát ISO

V tomto příkladu předávám stejnou hodnotu, ale ve formátu ISO:

SELECT TO_DSINTERVAL('P135DT08H35M47.123456789S')
FROM DUAL;

Výsledek:

+135 08:35:47.123456789

Zde je se zápornou hodnotou:

SELECT TO_DSINTERVAL('-P135DT08H35M47.123456789S')
FROM DUAL;

Výsledek:

-135 08:35:47.123456789

Zadejte výchozí hodnotu při chybě převodu

Máte také možnost zadat hodnotu, která se vrátí v případě, že dojde k chybě při převodu argumentu na INTERVAL DAY TO SECOND typ.

Příklad:

SELECT 
    TO_DSINTERVAL(
    'Oops!'
    DEFAULT '00 00:00:00' ON CONVERSION ERROR
    )
FROM DUAL;

Výsledek:

+00 00:00:00.000000

Nulové argumenty

Předávání null výsledkem je null :

SET NULL 'null';
SELECT 
    TO_DSINTERVAL(null)
FROM DUAL;

Výsledek:

null

Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo vždy, když null dochází v důsledku SQL SELECT prohlášení.

Můžete však použít SET NULL určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězec null by měl být vrácen.

Neplatný počet argumentů

Volání funkce bez předání jakýchkoli argumentů má za následek chybu:

SELECT TO_DSINTERVAL()
FROM DUAL;

Výsledek:

Error starting at line : 1 in command -
SELECT TO_DSINTERVAL()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

A předání příliš mnoha argumentů vede k chybě:

SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL;

Výsledek:

Error starting at line : 1 in command -
SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL
Error report -
ORA-12702: invalid NLS parameter string used in SQL function

  1. Jak ELT() funguje v MariaDB

  2. Funkce Concat nefunguje - neplatný počet argumentů

  3. Předcházení problémům s výkonem při trhání kolenem

  4. Zabraňte ukládání změn, které vyžadují opětovné vytvoření tabulky, negativním účinkům