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

Hàm định dạng ngày chung cho Oracle-sql và Mysql

Đầu tiên, trong MySQL, ngày thường có định dạng sau khi được chuyển đổi ngầm định - 2015-01-16 - chứ không phải 20150116 . Tôi nghĩ bạn có thể thực hiện những việc sau trong cả MySQL Oracle (nó là SQL tiêu chuẩn) - Tôi đã kiểm tra nó trong Oracle (10g) và nó hoạt động, và nó có vẻ hoạt động trong quá trình tìm hiểu MySQL :

SELECT * FROM mytable
 WHERE mydate IN ( DATE '2015-01-16', DATE '2015-01-18' );

Chuỗi ký tự được chuyển đổi thành DATE phải có dạng yyyy-mm-dd . Bây giờ, điều này sẽ hoạt động nếu ngày của bạn là ngày tháng và không có phần thời gian. Bây giờ nếu ngày của bạn có một phần thời gian, thì mọi thứ trở nên khó khăn hơn vì MySQL sử dụng DATE() hàm để lấy phần ngày tháng, trong khi Oracle sẽ sử dụng TRUNC() . Nhưng bạn có thể giải quyết vấn đề đó bằng cách sử dụng hợp lý >=< , ví dụ:

SELECT * FROM mytable
 WHERE ( mydate >= DATE '2015-01-16' AND mydate < DATE '2015-01-17' )
    OR ( mydate >= DATE '2015-01-18' AND mydate < DATE '2015-01-19' );

Bây giờ nếu bạn muốn sử dụng SYSDATE , điều tốt nhất nên làm là sử dụng tiêu chuẩn ANSI CURRENT_DATE hoặc CURRENT_TIMESTAMP . Chúng có thể được so sánh trực tiếp mà không cần định dạng và sẽ hoạt động trong cả MySQL và Oracle. Bạn cũng có thể tính toán ngày tháng bằng cách sử dụng INTERVAL , trong trường hợp đó, bạn có thể thử cách sau:

SELECT * FROM mytable
 WHERE mydate > CURRENT_DATE - INTERVAL '1' DAY;

CẬP NHẬT Tôi đã suy nghĩ về điều này. Truy vấn ngay bên trên không thực sự hoạt động nếu bạn muốn nhận tất cả các hàng đã được nhập hôm nay . Khó khăn là Oracle nhận ra các ký tự ngày ANSI là ngày tháng (nghĩa là không có phần thời gian), nhưng theo như tôi biết thì không có cách chuyển đổi tiêu chuẩn ANSI một ngày / giờ giá trị (mà một Oracle DATE là) đến một ngày . Điều đó nói rằng, cả Oracle và MySQL đều hỗ trợ hàm EXTRACT (), vì vậy bạn có thể thực hiện những việc sau để có được hôm nay hồ sơ của:

SELECT * FROM mytable
 WHERE EXTRACT(YEAR FROM mydate) = EXTRACT(YEAR FROM CURRENT_DATE)
   AND EXTRACT(MONTH FROM mydate) = EXTRACT(MONTH FROM CURRENT_DATE)
   AND EXTRACT(DAY FROM mydate) = EXTRACT(DAY FROM CURRENT_DATE);

Chắc chắn là khó sử dụng, đặc biệt nếu một ngày có nhiều hơn một ngày để xem xét (tôi cho rằng bạn làm như vậy vì bạn đang sử dụng IN ), nhưng sẽ hoạt động trên cả hai nền tảng. Xem SQL Fiddle Demo tại đây (MySQL) tại đây (Oracle) .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khắc phục sự cố đăng nhập PHP SQL đơn giản

  2. Lỗi kết hợp bất hợp pháp của lỗi đối chiếu từ MySql khi chạy bộ thử nghiệm rails

  3. Thiết lập back-end của MySQL trong Azure cho Xamarin Offline Sync

  4. Hướng dẫn xếp hạng sao jquery bằng php và mysql

  5. Làm cách nào để thực hiện Lời nhắc mật khẩu khôi phục và thay đổi trường email Người dùng thành trường tên người dùng với Laravel 5.0?