Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Fungsi format tanggal umum untuk Oracle-sql dan Mysql

Pertama, di MySQL tanggal biasanya memiliki format berikut ketika dikonversi secara implisit - 2015-01-16 - daripada 20150116 . Saya pikir Anda dapat melakukan hal berikut di MySQL dan Oracle (ini adalah SQL standar) - Saya telah memeriksanya di Oracle (10g) dan berfungsi, dan tampaknya berfungsi dalam mengutak-atik MySQL :

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

String literal yang akan dikonversi ke DATE harus dalam bentuk yyyy-mm-dd . Sekarang ini akan berfungsi jika tanggal Anda tanggal dan tidak memiliki porsi waktu. Sekarang jika tanggal Anda memiliki porsi waktu, maka segalanya menjadi lebih sulit karena MySQL menggunakan DATE() berfungsi untuk mendapatkan bagian tanggal, sedangkan Oracle akan menggunakan TRUNC() . Tapi Anda bisa menyiasatinya dengan penggunaan >= . yang bijaksana dan < , misalnya:

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' );

Sekarang jika Anda ingin menggunakan SYSDATE , hal terbaik yang harus dilakukan adalah menggunakan CURRENT_DATE standar ANSI atau CURRENT_TIMESTAMP . Ini dapat dibandingkan secara langsung tanpa perlu memformat dan harus bekerja di MySQL dan Oracle. Anda juga dapat melakukan aritmatika tanggal menggunakan INTERVAL , dalam hal ini Anda dapat mencoba hal berikut:

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

PERBARUI Saya telah melakukan beberapa pemikiran tentang ini. Kueri tepat di atas tidak benar-benar berfungsi jika Anda ingin mendapatkan semua baris yang telah dimasukkan hari ini . Kesulitannya adalah Oracle mengenali literal tanggal ANSI sebagai tanggal (yaitu, tanpa porsi waktu), tetapi sejauh yang saya tahu, tidak ada cara standar ANSI untuk mengonversi tanggal/waktu nilai (yang merupakan DATE Oracle Oracle adalah) ke tanggal . Karena itu, Oracle dan MySQL mendukung fungsi EXTRACT(), jadi Anda harus dapat melakukan hal berikut untuk mendapatkan hari ini catatan:

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);

Pasti berat, terutama jika seseorang memiliki lebih dari satu tanggal untuk dipertimbangkan (yang saya asumsikan Anda lakukan karena Anda menggunakan IN operator), tetapi harus bekerja pada kedua platform. Lihat Demo SQL Fiddle di sini (MySQL) dan di sini (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. Bergabunglah dengan subquery dengan doktrin 2 DBAL

  2. Bagaimana cara menampilkan batasan unik dari tabel di MySQL?

  3. Data open source tumbuh:Memilih MySQL, NoSQL, atau keduanya

  4. MySQL sintaks yang tepat untuk digunakan di dekat '' pada kesalahan baris 1

  5. Hitung duplikat catatan di tabel Mysql?