我有一個名爲「subscription」的表,如下所示。oracle查詢中'to_date'和'long to date'之間的結果混淆
desc subscription;
Name Null Type
--------------------- -------- ----------
SUBSCRIPTION_ID NOT NULL NUMBER(38)
EXPIRATIONDATE DATE`
並輸出查詢如下。
SELECT
subscription_id,
expirationdate
FROM subscription
WHERE subscription_id = 41919;
SUBSCRIPTION_ID EXPIRATIONDATE
---------------------- -------------------------
41919 18-JAN-14 13:45:56
而我試圖以不同的方式執行以下查詢。
1查詢返回一行:
SELECT s.subscription_id
FROM subscription$active s
WHERE s.expirationdate - (116/24)
BETWEEN TO_DATE('13-JAN-14 11:38:22', 'dd/mm/yyyy hh24:mi:ss')
AND TO_DATE('13-JAN-14 18:30:00', 'dd/mm/yyyy hh24:mi:ss')
AND s.subscription_id = 41919;
SUBSCRIPTION_ID
----------------------
41919
第二查詢不返回行:
SELECT s.subscription_id
FROM subscription$active s
WHERE s.expirationdate - (116/24)
BETWEEN (trunc(1389613102220/(1000), 0)/(24 * 60 * 60))
+ to_date('01/01/1970', 'mm/dd/yyyy')
AND (trunc(1389637800000/(1000), 0)/(24 * 60 * 60))
+ to_date('01/01/1970', 'mm/dd/yyyy')
AND s.subscription_id = 41919;
SUBSCRIPTION_ID
----------------
這裏既有where子句相同以上。第一個嘗試使用「to_date」,第二個轉換「long to date」。但是當我看到輸出時,第一個返回一行,第二個不返回任何結果。 我無法找出這裏'長久以來'的轉換有什麼不同。
長到最新的轉換也是正確的。
select (trunc(1389613102220/(1000), 0)/(24 * 60 * 60)) + to_date('01/01/1970','mm/dd/yyyy') from dual
輸出:
13-JAN-14 11:38:22
而且
select (trunc(1389637800000/(1000), 0)/(24 * 60 * 60)) + to_date('01/01/1970','mm/dd/yyyy') from dual
輸出:
13-JAN-14 18:30:00
有人可以幫助我理解不同第一次和第二次查詢之間的差異?
是的。你是對的。問題是因爲我插入的2位數年份。謝謝你的幫助。 – vijayashankard