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.
Kiểm tra tồn tại trong khoảng thời gian (Oracle)
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é
Cũng là một mẹo hay
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’))
)