2012-04-24 98 views
0

我正在使用Oracle 10g XE。我由Oracle SQL Developer內部有兩個數據庫。我正在執行此查詢。在數據庫中設置日期格式

SELECT SCHEDULE_ID, START_DATE, END_DATE 
    FROM SCHEDULE 
WHERE C_ID IN (5781) 
    AND START_DATE >=TO_DATE ('1/29/2012','MM/DD/YYYY') 
    AND END_DATE <=TO_DATE ('4/14/2012','MM/DD/YYYY') 

在第一個數據庫中,數據正確返回。我在第二個數據庫中執行相同的查詢,但它不返回任何值。但數據在表中可用。

我執行的查詢

SELECT dump(START_DATE), dump(END_DATE) FROM SCHEDULE WHERE C_ID=5026 

我得到的結果是,

DUMP(START_DATE) -> Typ=12 Len=7: 100,112,2,7,1,1,1 
DUMP(END_DATE) -> Typ=12 Len=7: 100,112,2,13,1,1,1 

和重要的事情是,我不應該修改query..Because其工作中的所有其他數據庫...

+4

日期設置不會影響這一點。你確定你的_data_是一樣的嗎? – Ben 2012-04-24 10:33:42

+0

yes.sure ..我查過了。 – RobinHood 2012-04-24 10:36:35

+0

我試過這樣的「.... TO_DATE(START_DATE)> = TO_DATE('1/29/2012','MM/DD/YYYY')」它的工作... ..但它不是正確的解決方案.... – RobinHood 2012-04-24 10:43:47

回答

4

你聲明:

SELECT dump(START_DATE), dump(END_DATE) FROM SCHEDULE WHERE C_ID=5026 

我得到的結果是,

DUMP(START_DATE) -> Typ=12 Len=7: 100,112,2,7,1,1,1 and DUMP(END_DATE) -> Typ=12 Len=7: 100,112,2,13,1,1,1 

我的評論:

100,112,2,7,1,1,1

100,112,2,13,1 ,1,1

這導致YYYY-MM-DD

Startdate 0012-02-07 00:00:00 
Enddate  0012-02-13 00:00:00 

所以你大約有2000年過去了。

日期數據類型的格式是

byte 1 - century (excess 100) 100 - 100 = 00 
byte 2 - year (excess 100) 112 - 100 = 12 
byte 3 - month = 2 
byte 4 - day = 7 
byte 5 - hour (excess 1) 1 - 1 = 0 
byte 6 - minute (excess 1) 1 - 1 = 0 
byte 7 - seconds (excess 1) 1 - 1 = 0 
+0

嗨,我無法理解你的答案..請解釋我該怎麼做...... – RobinHood 2012-04-24 14:40:51

+0

轉儲函數顯示數據庫中日期的內部表示形式爲100,112,2,7,1,1,1。這對應於0012-02-07。那天耶穌約12歲。從日程表中選擇to_char(startdate,'YYYY-MM-DD');你會看到的。所以可能你的數據是'錯誤的',至少不是你期望的結果。 – 2012-04-24 14:45:31

+0

@RobinHood - 你的日期是在12年,而不是在2012年(2000年前)。如果您希望SQL語句正常工作,則需要更改數據以確保日期正確。因此,例如'update schedule set start_date = add_months(start_date,12 * 2000),end_date = add_months(end_date,12 * 2000),其中c_id = 5026'將更新這兩行,以便年份正確。但是,你可能想要做一些類似'update schedule set start_date = add_months(start_date,12 * 2000)的地方start_date 2012-04-24 14:46:25