I Oracle Database er TO_YMINTERVAL()
funktion konverterer sit argument til en værdi på INTERVAL MONTH TO YEAR
datatype.
Syntaks
Syntaksen ser sådan ud:
TO_YMINTERVAL
( ' { [+|-] years - months
| ym_iso_format
} '
[ DEFAULT return_value ON CONVERSION ERROR ]
)
Du har mulighed for at sende argumentet i SQL-format eller ISO-format.
Her er forskellen:
sql_format
er SQL-intervalformat, der er kompatibelt med SQL-standarden (ISO/IEC 9075).ds_iso_format
er ISO-varighedsformatet kompatibelt med ISO 8601:2004-standarden.
I SQL-format, years
er et heltal mellem 0 og 999999999 og months
er et heltal mellem 0 og 11. Yderligere tomme felter er tilladt mellem formatelementer.
I ISO-format (syntaks nedenfor) er år og måneder heltal mellem 0 og 999999999. Dage, hours
, minutes
, seconds
, og frac_secs
er ikke-negative heltal og ignoreres, hvis det er angivet. Ingen tomme felter er tilladt i værdien. Hvis du angiver T
, så skal du angive mindst én af hours
, minutes
eller seconds
værdier.
Syntaksen for ds_iso_format
går sådan her:
[-] P [ years Y ] [months M] [days D]
[T [hours H] [minutes M] [seconds [. frac_secs] S ] ]
Eksempler
Her er nogle eksempler til demonstration.
SQL-format
Her sender jeg argumentet i SQL-format:
SELECT TO_YMINTERVAL('1-2')
FROM DUAL;
Resultat:
+01-02
I dette tilfælde bestod jeg et år og to måneder i SQL-format.
Vi kan forsætte den med sit tegn, hvis det er nødvendigt. Lad os vende det rundt til et negativt:
SELECT TO_YMINTERVAL('-1-2')
FROM DUAL;
Resultat:
-01-02
ISO-format
I dette eksempel sender jeg den samme værdi, men i ISO-format:
SELECT TO_YMINTERVAL('P1Y2M')
FROM DUAL;
Resultat:
+01-02
Her er det med en negativ værdi:
SELECT TO_YMINTERVAL('-P1Y2M')
FROM DUAL;
Resultat:
-01-02
Angiv en standardværdi ved konverteringsfejl
Du har også mulighed for at angive en værdi, der skal returneres i tilfælde af, at der er en fejl under konvertering af argumentet til en INTERVAL MONTH TO YEAR
type.
Eksempel:
SELECT
TO_YMINTERVAL(
'1y-02m'
DEFAULT '00-00' ON CONVERSION ERROR
)
FROM DUAL;
Resultat:
+00-00
Nul-argumenter
Sender null
resulterer i null
:
SET NULL 'null';
SELECT
TO_YMINTERVAL(null)
FROM DUAL;
Resultat:
null
Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null
opstår som et resultat af en SQL SELECT
udmelding.
Du kan dog bruge SET NULL
for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null
skal returneres.
Ugyldigt antal argumenter
Kaldning af funktionen uden at sende nogen argumenter, resulterer i en fejl:
SELECT TO_YMINTERVAL()
FROM DUAL;
Resultat:
SQL-fejl:ORA-00938:ikke nok argumenter til funktion00938. 00000 - "ikke nok argumenter til funktion
Og at sende for mange argumenter resulterer i en fejl:
SELECT TO_YMINTERVAL('P1Y2M', 'P3Y5M')
FROM DUAL;
Resultat:
SQL-fejl:ORA-00939:for mange argumenter for funktion00939. 00000 - "for mange argumenter for funktion"