01/10/2018, 01:11

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.

Mai Hữu viết 03:19 ngày 01/10/2018

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

Nguyen Ca viết 03:11 ngày 01/10/2018

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

 time1|==========================================|time2
            time11|===============|time12
Code Đại Hiệp viết 03:15 ngày 01/10/2018

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)

Code Đại Hiệp viết 03:21 ngày 01/10/2018

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

Nguyen Ca viết 03:13 ngày 01/10/2018

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

Joker viết 03:11 ngày 01/10/2018

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é

Code Đại Hiệp viết 03:17 ngày 01/10/2018

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

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

Chi Công Nguyen viết 03:19 ngày 01/10/2018

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ài liên quan
0