Kiểm tra tồn tại trong khoảng thời gian (Oracle)

Hi all,
Mình đang gặp rắc rồi khi kiểm tra khoảng thời gian 1 có nằm trong khoảng thời gian 2 hay không (Đến ngày của mỗi khoảng thời gian được phép null).
Mọi người giúp đỡ mình nhé.
Xin cảm ơn.

So sánh đầu cuối của hai khoảng thời gian

Vẽ cái hình ra là thấy

 time1|==========================================|time2
            time11|===============|time12

Của bạn đây vì den_ngay được phép null nên phải làm ntn. Không đơn giản chỉ là vẽ cái khoảng là ra. Nhiều bạn vẫn không biết cách làm để xử lý cái đoạn null. Vì oảcle null sẽ không so sánh đc


select birth_date from Students
where
(birth_date between tu_ngay and den_ngay and den_ngay is not null)
or
(birth_date >= tu_ngay and den_ngay is null)

Còn 1 cái ngày nữa thì nhét thêm đoạn “and” và làm tương tự vào phần where trên thôi. Mình Demo 1 cái bạn tự làm tiếp

ah, không đọc đoạn null, nếu null thì có thể là dùng nvl để check và thay thế bằng 31/12/9999

Vì đến ngày của 2 khoảng thời gian đều có thể = NULL nên có gặp chút vấn đề về việc so sánh.
Mình đã xử lý được bằng cách dùng Between để so sánh từ ngày, đến ngày của khoảng thời gian 1 với khoảng thời gian 2.
Và dùng NVL(dtToDate,TO_TIMESTAMP(‘31/12/9999’, ‘DD/MM/YYYY’)) để xử lý giá trị null
Cảm ơn Xuân Giang, Nguyen Ca nhé :smiley:

Cũng là một mẹo hay :slight_smile:

Cách nvl để chuyển sang 1 ngày “xa vời” trong tương lai là 1 cách hay. Làm việc với DB mình cũng thấy họ hay để như vậy ví dụ 01-01-3000

Bạn xem cái này có ok ko nhé
and
(
(TO_DATE(‘04/12/2005 09:07’,‘dd-MM-yyyy hh24:mi’) between START_TIME and END_TIME)
or
(TO_DATE(‘04/12/2025 10:07’,‘dd-MM-yyyy hh24:mi’) between START_TIME and END_TIME)
or
(START_TIME between TO_DATE(‘04/12/2005 10:07’,‘dd-MM-yyyy hh24:mi’) and TO_DATE(‘04/12/2025 10:07’,‘dd-MM-yyyy hh24:mi’))
or
(END_TIME between TO_DATE(‘04/12/2005 10:07’,‘dd-MM-yyyy hh24:mi’) and TO_DATE(‘04/12/2025 10:07’,‘dd-MM-yyyy hh24:mi’))
)

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?