W bazie danych Oracle TO_YMINTERVAL()
funkcja konwertuje swój argument na wartość INTERVAL MONTH TO YEAR
typ danych.
Składnia
Składnia wygląda tak:
TO_YMINTERVAL
( ' { [+|-] years - months
| ym_iso_format
} '
[ DEFAULT return_value ON CONVERSION ERROR ]
)
Masz możliwość przekazania argumentu w formacie SQL lub formacie ISO.
Oto różnica:
sql_format
to format interwału SQL zgodny ze standardem SQL (ISO/IEC 9075).ds_iso_format
to format czasu trwania ISO zgodny ze standardem ISO 8601:2004.
W formacie SQL, years
jest liczbą całkowitą z zakresu od 0 do 999999999 oraz months
jest liczbą całkowitą z przedziału od 0 do 11. Dodatkowe spacje są dozwolone między elementami formatu.
W formacie ISO (składnia poniżej) lata i miesiące są liczbami całkowitymi z zakresu od 0 do 999999999. Dni, hours
, minutes
, seconds
i frac_secs
są nieujemnymi liczbami całkowitymi i są ignorowane, jeśli określono. W wartości nie są dozwolone żadne spacje. Jeśli określisz T
, musisz określić co najmniej jedną z hours
, minutes
lub seconds
wartości.
Składnia ds_iso_format
idzie tak:
[-] P [ years Y ] [months M] [days D]
[T [hours H] [minutes M] [seconds [. frac_secs] S ] ]
Przykłady
Oto kilka przykładów do zademonstrowania.
Format SQL
Tutaj przekazuję argument w formacie SQL:
SELECT TO_YMINTERVAL('1-2')
FROM DUAL;
Wynik:
+01-02
W tym przypadku minął rok i dwa miesiące w formacie SQL.
W razie potrzeby możemy go poprzedzić jego znakiem. Odwróćmy to na negatyw:
SELECT TO_YMINTERVAL('-1-2')
FROM DUAL;
Wynik:
-01-02
Format ISO
W tym przykładzie przekazuję tę samą wartość, ale w formacie ISO:
SELECT TO_YMINTERVAL('P1Y2M')
FROM DUAL;
Wynik:
+01-02
Tutaj jest z wartością ujemną:
SELECT TO_YMINTERVAL('-P1Y2M')
FROM DUAL;
Wynik:
-01-02
Podaj wartość domyślną w przypadku błędu konwersji
Masz również możliwość podania wartości, która ma zostać zwrócona w przypadku wystąpienia błędu podczas konwersji argumentu na INTERVAL MONTH TO YEAR
typ.
Przykład:
SELECT
TO_YMINTERVAL(
'1y-02m'
DEFAULT '00-00' ON CONVERSION ERROR
)
FROM DUAL;
Wynik:
+00-00
Argumenty zerowe
Przekazywanie null
wyniki w null
:
SET NULL 'null';
SELECT
TO_YMINTERVAL(null)
FROM DUAL;
Wynik:
null
Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null
występuje w wyniku polecenia SQL SELECT
oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null
należy zwrócić.
Nieprawidłowa liczba argumentów
Wywołanie funkcji bez przekazywania żadnych argumentów powoduje błąd:
SELECT TO_YMINTERVAL()
FROM DUAL;
Wynik:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function
A przekazanie zbyt wielu argumentów skutkuje błędem:
SELECT TO_YMINTERVAL('P1Y2M', 'P3Y5M')
FROM DUAL;
Wynik:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"