iT邦幫忙

DAY 19
2

哇咧~夠了(Oracle SQL)系列 第 16

十九、比較的簡單級,簡單事不要複雜處理(Oracle SQL 2013/10/04)

  • 分享至 

  • xImage
  •  

SQL 裡面常常會用到比較,像是Where 1=1, 複製空白Table會用到Where 1 = 2,
像是某欄位大於多少,某日期是否超過3天了?
那,當這個表格,
有四個欄位aa,bb,cc,dd,每個欄位都有值時,如何比對這四個欄位是沒有一樣的?
如何比對這四個欄位是沒有一樣的?

例如:
1,2,3,4 → OK
1,2,3,3 → NG
9,3,1,3 → NG
只有第1筆是OK的!

這個問題是我很久以前在寫猜字遊戲再產生不重複的四位數,思考的問題。
曾經為了這個,寫了一大堆的比較公式,
像是第1個數跟第2,3,4比較。
第2個數跟第3,4比較。
第3個數跟第4比較。
當有相同的則失敗。
寫著寫著就想到不同方法。

那,用SQL寫這種比較可能會暈倒
其實,<比較>也可用很簡單的方處理!

create table ithelp_compare
(aa number,
bb number,
cc number,
dd number)
/

insert into  ithelp_compare values(1,2,3,4);
insert into  ithelp_compare values(1,2,3,3);
insert into  ithelp_compare values(9,3,1,3);
commit;

驗證寫入的資料共4筆
select * from ithelp_compare ;

       AA        BB        CC        DD
--------- --------- --------- ---------
        1         2         3         4
        1         2         3         3
        9         3         1         3

簡單比吧
select aa, bb, cc, dd
from ithelp_compare ic
where (aa-bb) * (aa-cc) * (aa-dd) * (bb-cc) * (bb-dd) * (cc-dd) <> 0
/

       AA        BB        CC        DD
--------- --------- --------- ---------
        1         2         3         4

原理就在,一旦有任兩個數是相同的,則相減=0,個別相減再相乘在一起,自然會等於0。
就這麼簡單!

但是,要特別注意,數字太大恐怕會有溢位的錯誤狀況。

[開發技術組]全文閱讀
http://ithelp.ithome.com.tw/ironman6/player/yafuu168/dev/1

[鐵人人生組]全文閱讀
http://ithelp.ithome.com.tw/ironman6/player/yafuu168/life/1


上一篇
十八、Unicode vs Big5(Oracle SQL 2013/10/03)
下一篇
廿、分秒必爭?(Oracle SQL 2013/10/05)
系列文
哇咧~夠了(Oracle SQL)28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言