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

Kết quả chuyển đổi ngày trong SQL thành tham số mô hình định dạng số không hợp lệ.

Nguyên nhân gốc rễ:

Bạn đang chuyển đổi một NUMBER tới STRING , giả sử đó là DATE . 20111010 không phải là NGÀY, mà là SỐ. Ngoài ra, '20111010' không phải là DATE, mà là STRING. Chúng hoàn toàn khác nhau.

  • 20111010 - NUMBER
  • '20111010' - STRING
  • TO_DATE('20111010','YYYYMMDD') - NGÀY

Lỗi:

SQL> SELECT TO_CHAR(20111010, 'YYYY/MM/DD') FROM dual;
SELECT TO_CHAR(20111010, 'YYYY/MM/DD') FROM dual
                         *
ERROR at line 1:
ORA-01481: invalid number format model

Đến với truy vấn của bạn:

WHERE TO_DATE(TO_CHAR(CREATE_TIME, 'YYYY/MM/DD'), 'YYYY/MM/DD')
  BETWEEN TO_DATE(TO_CHAR(:fromDate, 'YYYY/MM/DD'), 'YYYY/MM/DD') 
AND TO_DATE(TO_CHAR(:toDate, 'YYYY/MM/DD'), 'YYYY/MM/DD')

Bạn đang làm phức tạp việc chuyển đổi và định dạng một cách không cần thiết.

TIMESTAMP loại dữ liệu là một phần mở rộng vào DATE loại dữ liệu. Ngoài các phần tử ngày giờ của kiểu dữ liệu DATE, kiểu dữ liệu TIMESTAMP chứa các phần tử của giây với độ chính xác từ 0 đến 9 chữ số thập phân, giá trị mặc định là 6.

Vì bạn đang xử lý TIMESTAMP bạn có thể sử dụng TO_TIMESTAMP .

Trong khi thực hiện số học DATE / TIMESTAMP , bạn nên để nguyên kiểu dữ liệu và không chuyển đổi nó thành chuỗi . Bạn cần sử dụng TO_CHAR chỉ dành cho hiển thị .

Sửa đổi vị từ bộ lọc của bạn thành:

WHERE CREATE_TIME 
BETWEEN TO_TIMESTAMP(:fromDate, 'YYYY/MM/DD') 
AND TO_TIMESTAMP(:toDate, 'YYYY/MM/DD')

Ở trên, :fromDate:toDate phải là một chuỗi và không phải là số .

Ví dụ:

SQL> SELECT to_timestamp('20111010', 'YYYYMMDD') FROM dual;

TO_TIMESTAMP('20111010','YYYYMMDD')
-----------------------------------------------------------
10-OCT-11 12.00.00.000000000 AM

Hoặc, sử dụng TO_CHAR trước tiên chuyển đổi số thành chuỗi :

SQL> SELECT to_timestamp(TO_CHAR(20111010), 'YYYYMMDD') FROM dual;

TO_TIMESTAMP(TO_CHAR(20111010),'YYYYMMDD')
------------------------------------------------------------------
10-OCT-11 12.00.00.000000000 AM


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm phân tích Oracle cho giá trị nhỏ nhất trong nhóm

  2. Làm cách nào để sử dụng một tập hợp trong câu lệnh SQL Oracle

  3. Sự cố với thủ tục thực thi trong PL / SQL Developer

  4. đăng nhập bảo mật mùa xuân không hoạt động với oracle

  5. Cài đặt thời gian chờ kết nối cho cơ sở dữ liệu Oracle