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

So sánh ngày và giờ Sql từ bảng kép

Được rồi, tôi nghĩ tôi đã có được bạn. Bạn muốn làm như sau?

select <columns>
  from my_table
 where state_date <= <some date>
   and state_time <= <some time>

Khá bất thường khi quan tâm đến mili giây nhưng nếu bạn làm vậy thì bạn nên sử dụng systimestamp .

Đánh giá thực tế là bạn đã phân chia ngày và giờ, đây là các ký tự, Vì vậy, tôi sẽ phải đoán mặt nạ định dạng . Nếu họ sai, liên kết sẽ hướng dẫn bạn phải làm gì. Nhân tiện, thật không khôn ngoan khi chia tay theo cách này. Bạn có thể tạo một cột bằng cách sử dụng timestamp kiểu dữ liệu trong bảng của bạn, điều này sẽ làm cho vấn đề của bạn trở nên cực kỳ đơn giản.

Vì vậy, tôi không biết tại sao bạn lại chọn 'Day' định dạng cho truy vấn của bạn nhưng đi với <some date> đó trở thành to_char(sysdate, 'DAY') .

Từ bình luận của bạn bên dưới <some date> sẽ là to_char(sysdate, 'DD-MON-YY')

<some time> sẽ là to_char(systimestamp,'HH24:MI:SS:FF3') , điều này sẽ cung cấp cho bạn dấu thời gian đến từng mili giây, mặc dù kiểu dữ liệu có thể chuyển đến từng giây.

Nó có vẻ hơi lạ đối với tôi nhưng truy vấn của bạn sau đó sẽ trở thành:

select <columns>
  from my_table
 where state_date <= to_char(sysdate, 'DD-MON-YY')
   and state_time <= to_char(systimestamp,'HH24:MI:SS:FF3')

Sẽ bình thường hơn, nếu lưu trữ ngày dưới dạng chuỗi, lưu trữ nó ở định dạng yyyymmdd vì vậy ít nhất bạn có thể đảm bảo nó theo thứ tự. Nếu bạn đã làm điều gì đó như thế này thì chỉ cần thay đổi mặt nạ định dạng. Nếu bạn chưa có thì những truy vấn này sẽ không hoạt động như dự kiến.

Về mặt cá nhân, nếu bạn để lưu trữ dữ liệu theo cách này và giả sử state_date được lưu trữ dưới dạng dd-mon-yy , tức là bao gồm năm, tháng VÀ ngày và state_time được lưu trữ như được chỉ ra ở trên, sau đó tôi sẽ làm một cái gì đó như sau:

select <columns>
  from my_table
 where to_timestamp(state_date || state_time, 'DD-MON-YYHH24:MI:SS:FF3')
        <= systimestamp

Nó làm cho nó rõ ràng hơn rất nhiều về những gì đang xảy ra và không có sự mơ hồ về những gì < có nghĩa là trong trường hợp này vì một ngày sẽ luôn nhỏ hơn một ngày trong tương lai, điều này không nhất thiết phải đúng với các chuỗi.

Tôi hy vọng điều này có ý nghĩa.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách xuất đầu ra ở định dạng CSV thông qua một thủ tục

  2. Làm cách nào để hiển thị dữ liệu dạng bảng với Thủ tục được lưu trữ trong Java?

  3. so sánh ngày với một định dạng được xác định trước. pl sql

  4. Phương pháp thiết lập các tham số NLS và các ưu tiên của chúng (Cơ sở dữ liệu Oracle)

  5. Làm thế nào để tạo Thứ tự động theo mệnh đề trong thủ tục PL / SQL?