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

Các tháng không trả về giá trị chính xác

Bạn sai rồi. MONTHS_BETWEEN xử lý khoảng thời gian từ date '2017-02-28' đến date '2017-03-28' đúng một tháng (cùng ngày trong hai tháng liền kề). Bạn có thể đọc phần này trong tài liệu: https:// docs .oracle.com / cd / B19306_01 / server.102 / b14200 / functions089.htm

Một ngày lớn hơn ngày kia nên bạn nhận được số dương hoặc số âm (tức là không phải số 0) tùy thuộc vào tham số đầu tiên và tham số thứ hai, và khi các ngày bằng nhau, kết quả sẽ là một số nguyên. Đó là 1 hoặc -1 cho các tháng liền kề.

Cách tính tháng dù sao cũng là một điều kỳ lạ, vì một tháng không phải là một khoảng thời gian xác định. Có vẻ như bạn đang nghĩ đến một định nghĩa nhất định, định nghĩa này chỉ đơn giản là khác với cách MONTHS_BETWEEN định nghĩa nó. Không có gì sai về điều đó. Tôi đồng ý với MONTHS_BETWEEN trong trường hợp này; từ ngày 28 tháng 2 đến ngày 28 tháng 3 là "chính xác" một tháng. Nếu bạn muốn các quy tắc khác, hãy áp dụng phép toán của riêng bạn :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Quản lý bộ nhớ (Heap) tốt hơn trên Solaris 10

  2. Các vấn đề liên kết

  3. Cách tốt nhất để chạy các truy vấn Oracle định kỳ

  4. Tính toán số giờ dịch vụ đã qua cho các vé mở (Oracle SQL)

  5. Bí ẩn của rownum trong tiên tri