31-DEC-95 bukan string, juga bukan 20-JUN-94 . Mereka angka dengan beberapa hal tambahan yang ditambahkan di akhir. Ini seharusnya '31-DEC-95' atau '20-JUN-94' - perhatikan kutipan tunggal, ' . Ini akan memungkinkan Anda untuk melakukan perbandingan string.
Namun, Anda tidak melakukan perbandingan string; Anda sedang melakukan perbandingan tanggal . Anda harus mengubah string Anda menjadi tanggal. Baik dengan menggunakan TO_DATE() . bawaan fungsi, atau literal tanggal.
TO_DATE()
select employee_id
from employee
where employee_date_hired > to_date('31-DEC-95','DD-MON-YY')
Metode ini memiliki beberapa jebakan yang tidak perlu
- Seperti yang dicatat oleh a_horse_with_no_name dalam komentar,
DEC, tidak selalu berarti Desember. Itu tergantung padaNLS_DATE_LANGUAGEAnda danNLS_DATE_FORMATpengaturan. Untuk memastikan bahwa perbandingan Anda dengan pekerjaan di lokal mana pun, Anda dapat menggunakan model format datetimeMMsebagai gantinya - Tahun '95 tidak tepat. Anda tahu maksud Anda 1995, tetapi bagaimana jika itu tahun '50, apakah itu tahun 1950 atau 2050? Itu selalu yang terbaik untuk menjadi eksplisit
select employee_id
from employee
where employee_date_hired > to_date('31-12-1995','DD-MM-YYYY')
literal tanggal
Literal tanggal adalah bagian dari standar ANSI, yang berarti Anda tidak harus menggunakan fungsi khusus Oracle. Saat menggunakan literal Anda harus tentukan tanggal Anda dalam format YYYY-MM-DD dan Anda tidak dapat menyertakan elemen waktu.
select employee_id
from employee
where employee_date_hired > date '1995-12-31'
Ingat bahwa tipe data tanggal Oracle menyertakan elemen waktu, jadi tanggal tanpa porsi waktu sama dengan 1995-12-31 00:00:00 .
Jika Anda ingin memasukkan bagian waktu maka Anda harus menggunakan literal timestamp, yang mengambil format YYYY-MM-DD HH24:MI:SS[.FF0-9]
select employee_id
from employee
where employee_date_hired > timestamp '1995-12-31 12:31:02'
Informasi lebih lanjut
NLS_DATE_LANGUAGE berasal dari NLS_LANGUAGE dan NLS_DATE_FORMAT berasal dari NLS_TERRITORY . Ini disetel ketika Anda pertama kali membuat database tetapi mereka dapat diubah dengan mengubah file parameter inisialisasi Anda - hanya jika benar-benar diperlukan - atau pada tingkat sesi dengan menggunakan ALTER SESSION sintaksis. Misalnya:
alter session set nls_date_format = 'DD.MM.YYYY HH24:MI:SS';
Artinya:
DDhari numerik dalam sebulan, 1 - 31MMbulan numerik dalam setahun, 01 - 12 ( Januari adalah 01 )YYYY4 digit tahun - menurut saya ini selalu lebih baik dari tahun 2 digitYYkarena tidak ada kebingungan dengan abad apa yang Anda maksud.HH24jam dalam sehari, 0 - 23MImenit setiap jam, 0 - 59SSdetik menit, 0-59
Anda dapat mengetahui bahasa Anda saat ini dan setelan bahasa tanggal dengan menanyakan V$NLS_PARAMETERSs dan keseluruhan nilai valid dengan menanyakan V$NLS_VALID_VALUES .
Bacaan lebih lanjut
- Memformat model
Kebetulan, jika Anda ingin count(*) Anda perlu mengelompokkan berdasarkan employee_id
select employee_id, count(*)
from employee
where employee_date_hired > date '1995-12-31'
group by employee_id
Ini memberi Anda hitungan per employee_id .