sql >> Database >  >> RDS >> Oracle

TO_YMINTERVAL() Functie in Oracle

In Oracle Database, de TO_YMINTERVAL() functie converteert zijn argument naar een waarde van INTERVAL MONTH TO YEAR gegevenstype.

Syntaxis

De syntaxis gaat als volgt:

TO_YMINTERVAL
  ( '  { [+|-] years - months 
       | ym_iso_format 
       } '
    [ DEFAULT return_value ON CONVERSION ERROR ]
  )

Je hebt 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.

In SQL-indeling, years is een geheel getal tussen 0 en 999999999, en months is een geheel getal tussen 0 en 11. Extra spaties zijn toegestaan ​​tussen formaatelementen.

In ISO-formaat (syntaxis hieronder) zijn jaren en maanden gehele getallen tussen 0 en 999999999. Dagen, hours , minutes , seconds , en frac_secs zijn niet-negatieve gehele getallen en worden genegeerd, indien opgegeven. Er zijn geen spaties toegestaan ​​in de waarde. Als u T . opgeeft , dan moet u ten minste één van de hours . opgeven , minutes , of seconds waarden.

De syntaxis voor ds_iso_format gaat als volgt:

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

Voorbeelden

Hier zijn enkele voorbeelden om te demonstreren.

SQL-indeling

Hier geef ik het argument door in SQL-formaat:

SELECT TO_YMINTERVAL('1-2')
FROM DUAL;

Resultaat:

+01-02

In dit geval ben ik een jaar en twee maanden geslaagd in SQL-formaat.

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

SELECT TO_YMINTERVAL('-1-2')
FROM DUAL;

Resultaat:

-01-02

ISO-formaat

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

SELECT TO_YMINTERVAL('P1Y2M')
FROM DUAL;

Resultaat:

+01-02

Hier is het met een negatieve waarde:

SELECT TO_YMINTERVAL('-P1Y2M')
FROM DUAL;

Resultaat:

-01-02

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 MONTH TO YEAR typ.

Voorbeeld:

SELECT 
    TO_YMINTERVAL(
    '1y-02m'
    DEFAULT '00-00' ON CONVERSION ERROR
    )
FROM DUAL;

Resultaat:

+00-00

Nullargumenten

Doorgeven van null resulteert in null :

SET NULL 'null';
SELECT 
    TO_YMINTERVAL(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_YMINTERVAL()
FROM DUAL;

Resultaat:

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function

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

SELECT TO_YMINTERVAL('P1Y2M', 'P3Y5M')
FROM DUAL;

Resultaat:

SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"

  1. PostgreSQL - dynamische waarde als tabelnaam

  2. Interviewtips voor SQL-databasebeheerders

  3. MySql zet rij om in kolom en kolom in rij

  4. ORA-06502:PL/SQL:numerieke of waardefout:tekenreeksbuffer te klein