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"