Trong Cơ sở dữ liệu Oracle, TO_YMINTERVAL()
hàm chuyển đổi đối số của nó thành giá trị INTERVAL MONTH TO YEAR
kiểu dữ liệu.
Cú pháp
Cú pháp như sau:
TO_YMINTERVAL
( ' { [+|-] years - months
| ym_iso_format
} '
[ DEFAULT return_value ON CONVERSION ERROR ]
)
Bạn có tùy chọn chuyển đối số ở định dạng SQL hoặc định dạng ISO.
Đây là sự khác biệt:
-
sql_format
là định dạng khoảng thời gian SQL tương thích với tiêu chuẩn SQL (ISO / IEC 9075). -
ds_iso_format
là định dạng thời lượng ISO tương thích với tiêu chuẩn ISO 8601:2004.
Ở định dạng SQL, years
là một số nguyên từ 0 đến 999999999 và months
là một số nguyên từ 0 đến 11. Được phép bổ sung khoảng trống giữa các phần tử định dạng.
Ở định dạng ISO (cú pháp bên dưới), năm và tháng là các số nguyên từ 0 đến 999999999. Ngày, hours
, minutes
, seconds
và frac_secs
là các số nguyên không âm và bị bỏ qua, nếu được chỉ định. Không có khoảng trống nào được phép trong giá trị. Nếu bạn chỉ định T
, thì bạn phải chỉ định ít nhất một trong các hours
, minutes
hoặc seconds
giá trị.
Cú pháp cho ds_iso_format
như sau:
[-] P [ years Y ] [months M] [days D]
[T [hours H] [minutes M] [seconds [. frac_secs] S ] ]
Ví dụ
Dưới đây là một số ví dụ để minh chứng.
Định dạng SQL
Ở đây, tôi chuyển đối số ở định dạng SQL:
SELECT TO_YMINTERVAL('1-2')
FROM DUAL;
Kết quả:
+01-02
Trong trường hợp này, tôi đã vượt qua một năm hai tháng ở định dạng SQL.
Chúng tôi có thể thêm vào nó với dấu hiệu của nó nếu cần thiết. Hãy chuyển nó sang phủ định:
SELECT TO_YMINTERVAL('-1-2')
FROM DUAL;
Kết quả:
-01-02
Định dạng ISO
Trong ví dụ này, tôi chuyển cùng một giá trị, nhưng ở định dạng ISO:
SELECT TO_YMINTERVAL('P1Y2M')
FROM DUAL;
Kết quả:
+01-02
Đây là giá trị âm:
SELECT TO_YMINTERVAL('-P1Y2M')
FROM DUAL;
Kết quả:
-01-02
Cung cấp Giá trị Mặc định do Lỗi Chuyển đổi
Bạn cũng có tùy chọn cung cấp giá trị để trả về trong trường hợp có lỗi xảy ra khi chuyển đổi đối số thành INTERVAL MONTH TO YEAR
loại.
Ví dụ:
SELECT
TO_YMINTERVAL(
'1y-02m'
DEFAULT '00-00' ON CONVERSION ERROR
)
FROM DUAL;
Kết quả:
+00-00
Đối số rỗng
Chuyển null
kết quả là null
:
SET NULL 'null';
SELECT
TO_YMINTERVAL(null)
FROM DUAL;
Kết quả:
null
Theo mặc định, SQLcl và SQL * Plus trả về một khoảng trống bất cứ khi nào null
xảy ra do một SELECT
trong SQL tuyên bố.
Tuy nhiên, bạn có thể sử dụng SET NULL
để chỉ định một chuỗi khác được trả về. Ở đây tôi đã chỉ định rằng chuỗi null
nên được trả lại.
Số lượng đối số không hợp lệ
Gọi hàm mà không chuyển bất kỳ đối số nào, dẫn đến lỗi:
SELECT TO_YMINTERVAL()
FROM DUAL;
Kết quả:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function
Và việc chuyển quá nhiều đối số dẫn đến lỗi:
SELECT TO_YMINTERVAL('P1Y2M', 'P3Y5M')
FROM DUAL;
Kết quả:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"