ฉันกำลังพยายามแสดง 12 เดือนจาก 5 ปีที่แล้วในเดือนมีนาคม วิธีเดียวที่ฉันจะทำให้ถูกต้องคือ:
select to_char(add_months(sysdate, level-51),'YYYY-MM')
from dual
connect by level <= 12
จอแสดงผลใด:
2014-03
2014-04
2014-05
...
อย่างไรก็ตามฉันต้องการวันที่
แต่ลองใช้:
select to_date(to_char(add_months(sysdate, level-51),'YYYY-MM'),'YYYY-MM')
from dual
connect by level <= 12
ให้เดือน:
2014-03-01
2014-04-01
2014-05-01
...
คำถาม ใครมีวิธีแก้ไขบ้างไหม
แก้ไข:
ทำ
alter session set nls_date_format='YYYY-MM';
แก้ไขปัญหา แต่จะกำหนดรูปแบบนี้ในขั้นตอนการจัดเก็บได้อย่างไร?
CROSS JOIN
โดยใช้ตารางปฏิทินและ EID ที่แตกต่างกันของคุณ แทนที่จะใช้ for loop และเหตุใดคุณจึงสนใจเกี่ยวกับการจัดรูปแบบประเภทวันที่และเวลาเมื่อคุณพยายามแทรกลงในตาราง หลังจากใส่แล้ว เป็นเพียงชนิด datetime และจะมีทั้งหมด part คือ ปี เดือน วัน ชั่วโมง นาที วินาที ค้นหาและอ่านเพิ่มเติมเกี่ยวกับประเภทข้อมูล Oracle DATE ดังนั้นคุณต้องการเพียงSELECT TRUNC(ADD_MONTHS(SYSDATE, LEVEL-51), 'MM') FROM dual CONNECT BY LEVEL <= 12
- person Pham X. Bach   schedule 23.05.2018