sql >> Database >  >> RDS >> Oracle

TO_DSINTERVAL() Functie in Oracle

In Oracle Database, de TO_DSINTERVAL() functie converteert zijn argument naar een waarde van INTERVAL DAY TO SECOND gegevenstype.

Syntaxis

De syntaxis gaat als volgt:

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

Je hebt dus de mogelijkheid om het argument door te geven in SQL-formaat of ISO-formaat.

Dit is het verschil:

  • sql_format is een SQL-intervalformaat dat compatibel is met de SQL-standaard (ISO/IEC 9075).
  • ds_iso_format is ISO-duurformaat dat compatibel is met de ISO 8601:2004-standaard.

De syntaxis voor sql_format gaat als volgt:

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

Waar:

  • days is een geheel getal tussen 0 en 999999999
  • hours is een geheel getal tussen 0 en 23
  • minutes en seconds zijn gehele getallen tussen 0 en 59
  • frac_secs is het fractionele deel van seconden tussen .0 en .999999999.
  • Een of meer lege plekken scheiden dagen van uren. Extra spaties zijn toegestaan ​​tussen formaatelementen.

En de syntaxis voor ds_iso_format :

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

Waar:

  • days , hours , minutes en seconds zijn gehele getallen tussen 0 en 999999999.
  • frac_secs is het fractionele deel van seconden tussen .0 en .999999999.
  • Er zijn geen spaties toegestaan ​​in de waarde.
  • Als je T . opgeeft , dan moet u ten minste één van de hours . opgeven , minutes , of seconds waarden.

Voorbeelden

Hier zijn enkele voorbeelden om te demonstreren.

SQL-indeling

Hier geef ik het argument door in SQL-formaat:

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

Resultaat:

+135 08:35:47.123456789

We kunnen er indien nodig een teken aan toevoegen. Laten we het omdraaien naar een negatief:

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

Resultaat:

-135 08:35:47.123456789

ISO-formaat

In dit voorbeeld geef ik dezelfde waarde door, maar in ISO-formaat:

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

Resultaat:

+135 08:35:47.123456789

Hier is het met een negatieve waarde:

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

Resultaat:

-135 08:35:47.123456789

Geef een standaardwaarde op bij conversiefout

Je hebt ook de mogelijkheid om een ​​waarde op te geven die moet worden geretourneerd in het geval dat er een fout optreedt tijdens het converteren van het argument naar een INTERVAL DAY TO SECOND typ.

Voorbeeld:

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

Resultaat:

+00 00:00:00.000000

Nullargumenten

Doorgeven van null resulteert in null :

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

Resultaat:

null

Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null treedt op als resultaat van een SQL SELECT uitspraak.

U kunt echter SET NULL . gebruiken om een ​​andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null moet worden geretourneerd.

Ongeldig aantal argumenten

Het aanroepen van de functie zonder argumenten door te geven, resulteert in een fout:

SELECT TO_DSINTERVAL()
FROM DUAL;

Resultaat:

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:

En het doorgeven van te veel argumenten resulteert in een fout:

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

Resultaat:

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. stel een leeg wachtwoord in voor PostgreSQL-gebruiker

  2. Wat is SQLite?

  3. Hoe lat en lang te krijgen van sdo_geometry in oracle

  4. Oracle:is er een tool om queries te traceren, zoals Profiler voor SQL Server?