簡體   English   中英

在DB2 sql中獲得最接近的匹配值

[英]To get the nearest matching value in DB2 sql

我有一個具有以下值的表

   ACCNO                  TEXT
   -------------     ----------------
   8611004050001     internal payment
   861100405000X     external payment
   8611XXXXXXXXX     other payments

假設如果accono是8611004050002,那么我必須要支付外部圖片。 如果accno是8611211216223,那么我必須得到其他付款。

我需要獲取最接近的匹配值是我嘗試用case語句運行的單個sql。 什么是實現此目標的有效方法?

請幫我

嗯,一種方法使用了巨大的case陳述。 像這樣:

select t.*
from t
order by (case when accno = <accno> then 99
               when left(accno, 15) = left(<accno>, 15) then 15
               when left(accno, 14) = left(<accno>, 14) then 14
               when left(accno, 13) = left(<accno>, 13) then 13
               when left(accno, 12) = left(<accno>, 12) then 12
               when left(accno, 11) = left(<accno>, 11) then 11
               when left(accno, 10) = left(<accno>, 10) then 10
               when left(accno, 9) = left(<accno>, 9) then 9
               when left(accno, 8) = left(<accno>, 8) then 8
               when left(accno, 7) = left(<accno>, 7) then 7
               when left(accno, 6) = left(<accno>, 6) then 6
               when left(accno, 5) = left(<accno>, 5) then 5
               when left(accno, 4) = left(<accno>, 4) then 4
               when left(accno, 3) = left(<accno>, 3) then 3
               when left(accno, 2) = left(<accno>, 2) then 2
               when left(accno, 1) = left(<accno>, 1) then 1
               else 0
          end) desc
fetch first 1 row only;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM