31-DEC-95
ไม่ใช่สตริงหรือ20-JUN-94
ไม่ใช่ พวกมันเป็นตัวเลขพร้อมสิ่งพิเศษที่เพิ่มเข้ามาในตอนท้าย นี้ควรจะเป็น'31-DEC-95'
หรือ'20-JUN-94'
- '
ทราบคำพูดเดียว สิ่งนี้จะช่วยให้คุณทำการเปรียบเทียบสตริง
อย่างไรก็ตามคุณไม่ได้ทำการเปรียบเทียบสตริง คุณกำลังทำเปรียบเทียบวันที่ คุณควรแปลงสตริงเป็นวันที่ โดยใช้ในตัวTO_DATE()
ฟังก์ชั่นหรือตัวอักษรวัน
TO_DATE ()
select employee_id
from employee
where employee_date_hired > to_date('31-DEC-95','DD-MON-YY')
วิธีนี้มีข้อผิดพลาดเล็กน้อยที่ไม่จำเป็น
- ในฐานะที่เป็น a_horse_with_no_name บันทึกไว้ในความคิดเห็น
DEC
ไม่จำเป็นต้องหมายความว่าธันวาคม มันขึ้นอยู่กับคุณNLS_DATE_LANGUAGE
และNLS_DATE_FORMAT
การตั้งค่า เพื่อให้แน่ใจว่าการเปรียบเทียบของคุณกับงานในสถานที่ใด ๆ คุณสามารถใช้รูปแบบรูปแบบวันที่และเวลา MM
แทน
- ปี '95 ไม่แน่นอน คุณรู้ว่าคุณหมายถึง 1995 แต่ถ้าเป็น '50 นั่นคือ 1950 หรือ 2050 เป็นการดีที่สุดเสมอที่จะชัดเจน
select employee_id
from employee
where employee_date_hired > to_date('31-12-1995','DD-MM-YYYY')
วันที่ตัวอักษร
ตัวอักษรวันที่เป็นส่วนหนึ่งของมาตรฐาน ANSI ซึ่งหมายความว่าคุณไม่จำเป็นต้องใช้ฟังก์ชันเฉพาะของออราเคิล เมื่อใช้ตัวอักษรคุณต้องระบุวันที่ของคุณในรูปแบบYYYY-MM-DD
และคุณไม่สามารถรวมองค์ประกอบเวลา
select employee_id
from employee
where employee_date_hired > date '1995-12-31'
โปรดจำไว้ว่าวันที่ประเภทข้อมูลของออราเคิลรวมถึง elemement 1995-12-31 00:00:00
เวลาดังนั้นวันโดยไม่ต้องส่วนเวลาเทียบเท่ากับ
หากคุณต้องการรวมส่วนของเวลาคุณจะต้องใช้ตัวอักษรเวลาประทับซึ่งใช้รูปแบบ YYYY-MM-DD HH24:MI:SS[.FF0-9]
select employee_id
from employee
where employee_date_hired > timestamp '1995-12-31 12:31:02'
ข้อมูลเพิ่มเติม
NLS_DATE_LANGUAGE
ที่ได้มาจากNLS_LANGUAGE
การที่ได้มาจากNLS_DATE_FORMAT
NLS_TERRITORY
สิ่งเหล่านี้ถูกตั้งค่าเมื่อคุณสร้างฐานข้อมูล แต่สามารถเปลี่ยนแปลงได้โดยการเปลี่ยนไฟล์พารามิเตอร์ inialization ของคุณหากจำเป็นจริงๆหรือในระดับเซสชันโดยใช้ALTER SESSION
ไวยากรณ์ ตัวอย่างเช่น
alter session set nls_date_format = 'DD.MM.YYYY HH24:MI:SS';
หมายความว่า:
DD
วันที่เป็นตัวเลขของเดือน 1 - 31
MM
เดือนที่เป็นตัวเลขของปี 01 - 12 (มกราคมคือ 01)
YYYY
ปี 4 หลัก - ในความคิดของฉันนี้ดีกว่าเสมอ 2 ปีYY
เพราะไม่มีความสับสนกับศตวรรษที่คุณกำลังอ้างถึง
HH24
ชั่วโมงของวัน 0 - 23
MI
นาทีของชั่วโมง 0 - 59
SS
วินาทีของนาที 0-59
คุณสามารถหาข้อมูลภาษาและภาษาวันที่การตั้งค่าปัจจุบันของคุณโดยการสอบถามและช่วงเสียงเต็มรูปแบบของค่าที่ถูกต้องโดยการสอบถามV$NLS_PARAMETERSs
V$NLS_VALID_VALUES
อ่านเพิ่มเติม
อนึ่งหากคุณต้องการให้count(*)
คุณจัดกลุ่มตามemployee_id
select employee_id, count(*)
from employee
where employee_date_hired > date '1995-12-31'
group by employee_id
นี้จะช่วยให้คุณนับต่อ employee_id
> <
หรือBETWEEN '' AND ''