31-DEC-95bukan string, juga bukan 20-JUN-94. Mereka angka dengan beberapa hal tambahan yang ditambahkan pada akhirnya. Ini harus '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()fungsi bawaan, atau literal tanggal .
SAAT INI()
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 a_horse_with_no_name dicatat dalam komentar,,
DECtidak harus berarti Desember. Itu tergantung pada pengaturan NLS_DATE_LANGUAGEdan Anda NLS_DATE_FORMAT. Untuk memastikan bahwa perbandingan Anda dengan pekerjaan di lokal saja Anda dapat menggunakan format model datetime MM bukan
- Tahun '95 tidak tepat. Anda tahu maksud Anda tahun 1995, tetapi bagaimana jika itu tahun '50, apakah itu tahun 1950 atau 2050? Itu selalu 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 spesifik Oracle. Saat menggunakan literal Anda harus menentukan tanggal Anda dalam format YYYY-MM-DDdan Anda tidak dapat memasukkan elemen waktu.
select employee_id
from employee
where employee_date_hired > date '1995-12-31'
Ingat bahwa datatype tanggal Oracle menyertakan elemement waktu, sehingga tanggal tanpa porsi waktu sama dengan 1995-12-31 00:00:00 .
Jika Anda ingin memasukkan bagian waktu maka Anda harus menggunakan timestamp literal, 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_LANGUAGEberasal dari NLS_LANGUAGEdan NLS_DATE_FORMATberasal dari NLS_TERRITORY. Ini diatur ketika Anda awalnya membuat database tetapi mereka dapat diubah dengan mengubah file parameter inisialisasi Anda - hanya jika benar-benar diperlukan - atau pada tingkat sesi dengan menggunakan ALTER SESSIONsintaks. Misalnya:
alter session set nls_date_format = 'DD.MM.YYYY HH24:MI:SS';
Ini berarti:
DD hari numerik bulan itu, 1 - 31
MM bulan numerik tahun ini, 01 - 12 (Januari adalah 01)
YYYY4 digit tahun - menurut saya ini selalu lebih baik dari tahun 2 digit YYkarena tidak ada kebingungan dengan abad apa yang Anda maksud.
HH24 jam sehari, 0-23
MI menit, 0 - 59
SS menit kedua, 0-59
Anda dapat mengetahui pengaturan bahasa tanggal dan bahasa saat ini dengan kueri V$NLS_PARAMETERSsdan keseluruhan penuh nilai yang valid dengan kueri V$NLS_VALID_VALUES.
Bacaan lebih lanjut
Kebetulan, jika Anda ingin, count(*)Anda perlu mengelompokkan berdasarkanemployee_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 .
> <atauBETWEEN '' AND ''