2012-12-25 62 views
6

我有一個像PL/SQL代碼:如果y <x,PL/SQL「x和y之間」不起作用。爲什麼?

case when column between 201203 and 201201 
then other_column 
end 

我知道有列是201203.因此代碼應該返回一些值的值。但它沒有,直到我糾正它,如:

case when column between 201201 and 201203 
then other_column 
end 

爲什麼之間的關鍵字工程是這樣的?它如何在Oracle數據庫上實現?

回答

9

這是ANSI SQL行爲。

expr1 BETWEEN expr2 AND expr3 

轉化爲

expr2 <= expr1 AND expr1 <= expr3 
+1

在旁註中..我嘗試鏈接ISO 13249-1中定義的標準。不幸的是,ANSI和ISO都希望爲這些PDF付錢,而且我沒有找到公開的副本 - 哇。想象一下,RFC會花錢,互聯網將是一個沒有任何標準的混亂局面。http://www.iso.org /iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=38649和http://webstore.ansi.org/FindStandards.aspx?SearchString=13249-1&SearchOption=0&PageNum=0&SearchTermsArray=null%7c13249-1%7cnull#。 UNnboG_X5yJ –

+1

這是在[Oracle文檔](http://docs.oracle.com/cd/E11882_01/server.112/e26088/conditions011.htm)中闡述的,它也明確指出'如果expr3

1

考慮

val1 between val2 and val3 

(val1 >= val2) and (val1 <= val3) 

那麼我們有什麼?

column between 201203 and 201201 

是相當於

(column >= 201203) and (column <= 201201) 

如果column值,讓我們說,然後201202第一條件 (column >= 201203)將是錯誤的,第二個也將是錯誤的。這就是爲什麼你沒有得到任何結果。 Find out more

1

在Between子句中,始終是較低的值而不是較高的值。

例如: - 100和200之間

,而不是

200至100

在查詢分析器解析100和200之間那麼這將是像這樣: -

X> = 100 AND X < = 200

相關問題