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 :-)