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_PARAMETERSsV$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 ''