Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Hàm TO_DSINTERVAL () trong Oracle

Trong Cơ sở dữ liệu Oracle, TO_DSINTERVAL() hàm chuyển đổi đối số của nó thành giá trị INTERVAL DAY TO SECOND kiểu dữ liệu.

Cú pháp

Cú pháp như sau:

TO_DSINTERVAL ( ' { sql_format | ds_iso_format } ' 
  [ DEFAULT return_value ON CONVERSION ERROR ] )

Vì vậy, 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.

Cú pháp cho sql_format như sau:

[+ | -] days hours : minutes : seconds [. frac_secs ]

Ở đâu:

  • days là một số nguyên từ 0 đến 999999999
  • hours là một số nguyên từ 0 đến 23
  • minutes seconds là các số nguyên từ 0 đến 59
  • frac_secs là phần thập phân của giây trong khoảng từ .0 đến .999999999.
  • Một hoặc nhiều ô trống tách biệt ngày với giờ. Cho phép thêm khoảng trống giữa các phần tử định dạng.

Và cú pháp cho ds_iso_format :

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

Ở đâu:

  • days , hours , minutes seconds là các số nguyên từ 0 đến 999999999.
  • frac_secs là phần thập phân của giây trong khoảng từ .0 đến .999999999.
  • Không cho phép khoảng trống 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ị.

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_DSINTERVAL('135 08:35:47.123456789')
FROM DUAL;

Kết quả:

+135 08:35:47.123456789

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_DSINTERVAL('-135 08:35:47.123456789')
FROM DUAL;

Kết quả:

-135 08:35:47.123456789

Đị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_DSINTERVAL('P135DT08H35M47.123456789S')
FROM DUAL;

Kết quả:

+135 08:35:47.123456789

Đây là giá trị âm:

SELECT TO_DSINTERVAL('-P135DT08H35M47.123456789S')
FROM DUAL;

Kết quả:

-135 08:35:47.123456789

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 DAY TO SECOND loại.

Ví dụ:

SELECT 
    TO_DSINTERVAL(
    'Oops!'
    DEFAULT '00 00:00:00' ON CONVERSION ERROR
    )
FROM DUAL;

Kết quả:

+00 00:00:00.000000

Đối số rỗng

Chuyển null kết quả là null :

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

Kết quả:

Error starting at line : 1 in command -
SELECT TO_DSINTERVAL()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

Và việc chuyển quá nhiều đối số dẫn đến lỗi:

SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL;

Kết quả:

Error starting at line : 1 in command -
SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL
Error report -
ORA-12702: invalid NLS parameter string used in SQL function

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Một tài liệu tham khảo tốt cho Oracle PL / SQL

  2. Nối một cột theo một nhóm trong R

  3. SQL - Tìm câu lệnh chèn các giá trị cụ thể

  4. Sử dụng Tên dịch vụ Oracle với SQLAlchemy

  5. Lược đồ kỹ sư đảo ngược (oracle) thành ERD