sql >> Databasteknik >  >> RDS >> Oracle

TO_DSINTERVAL() Funktion i Oracle

I Oracle Database, TO_DSINTERVAL() funktionen konverterar sitt argument till värdet INTERVAL DAY TO SECOND datatyp.

Syntax

Syntaxen ser ut så här:

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

Så du har möjlighet att skicka argumentet i SQL-format eller ISO-format.

Här är skillnaden:

  • sql_format är SQL-intervallformat kompatibelt med SQL-standarden (ISO/IEC 9075).
  • ds_iso_format är ISO-varaktighetsformat kompatibelt med ISO 8601:2004-standarden.

Syntaxen för sql_format går så här:

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

Var:

  • days är ett heltal mellan 0 och 999999999
  • hours är ett heltal mellan 0 och 23
  • minutes och seconds är heltal mellan 0 och 59
  • frac_secs är bråkdelen av sekunder mellan .0 och .999999999.
  • En eller flera tomma fält skiljer dagar från timmar. Ytterligare tomrum är tillåtna mellan formatelement.

Och syntaxen för ds_iso_format :

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

Var:

  • days , hours , minutes och seconds är heltal mellan 0 och 999999999.
  • frac_secs är bråkdelen av sekunder mellan .0 och .999999999.
  • Inga blanksteg är tillåtna i värdet.
  • Om du anger T , då måste du ange minst en av hours , minutes , eller seconds värden.

Exempel

Här är några exempel att visa.

SQL-format

Här skickar jag argumentet i SQL-format:

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

Resultat:

+135 08:35:47.123456789

Vi kan förse den med dess tecken om det behövs. Låt oss vända det till ett negativt:

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

Resultat:

-135 08:35:47.123456789

ISO-format

I det här exemplet skickar jag samma värde, men i ISO-format:

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

Resultat:

+135 08:35:47.123456789

Här är det med ett negativt värde:

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

Resultat:

-135 08:35:47.123456789

Ange ett standardvärde vid konverteringsfel

Du har också möjlighet att ange ett värde som ska returneras i händelse av att det uppstår ett fel när argumentet konverteras till en INTERVAL DAY TO SECOND typ.

Exempel:

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

Resultat:

+00 00:00:00.000000

Nollargument

Skickar null resulterar i null :

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

Resultat:

null

Som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när null uppstår som ett resultat av en SQL SELECT påstående.

Du kan dock använda SET NULL för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null bör returneras.

Ogiltigt antal argument

Att anropa funktionen utan att skicka några argument resulterar i ett fel:

SELECT TO_DSINTERVAL()
FROM DUAL;

Resultat:

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:

Och att skicka för många argument resulterar i ett fel:

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

Resultat:

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. Oracle till PostgreSQL — Markörer och vanliga tabelluttryck

  2. Varför kan det bara finnas en TIMESTAMP-kolumn med CURRENT_TIMESTAMP i DEFAULT-satsen?

  3. Hur man säkerhetskopierar och återställer en PostgreSQL-databas via DBeaver

  4. OLTP-prestanda sedan PostgreSQL 8.3