我不確定這是否可能,我有一個包含 refNumber 欄位的 DB 表,其中一些欄位值包含兩個前導零,以下是示例。
| ID。 | 參考編號 |
|---|---|
| 10001 | 123 |
| 10002 | 00456 |
現在我正在嘗試撰寫一個查詢,它可以從這個表中選擇我們沒有前導零(只有兩個不小于或大于兩個)。這是一個例子,對于 select refNumber=123 OR refNumber=00123 應該回傳結果 10001 和refNumber=00456 OR refNumber=456 應該回傳 10002 的結果。我不能使用 like 運算子,因為在這種情況下其他記錄也可能被回傳。是否可以通過查詢?如果不是,選擇此類記錄的正確方法是什么?我避免回圈我的應用程式中的所有行。
uj5u.com熱心網友回復:
您需要TRIM在 - 列和要過濾的值上應用函式:
SELECT * FROM MyTable
WHERE TRIM(LEADING '0' FROM refNumber) = TRIM(LEADING '0' FROM '00123') -- here you put your desired ref number
uj5u.com熱心網友回復:
使用修剪()
Select * from table where trim(refnumber) IN ('123','456')
或以支持的替換()
Select * from table where
replace(refnumber, '0','') IN
('123','456')
uj5u.com熱心網友回復:
雖然當前接受的答案會起作用,但請注意,它充其量會導致 Db2 執行全索引掃描,最壞的情況可能會導致全表掃描。
不是從數百萬條記錄中回傳 1 條或 2 條記錄的特別有效的方法。每當您在WHERE子句中的表列上使用運算式時,就會發生這種情況。
如果您知道只有 5 個數字或更少,則更好的解決方案是執行以下操作:
SELECT * FROM MyTable
WHERE refNumber in ('00123','123')
假設您可以在查詢之外構建兩種可能性。
如果你真的想讓查詢處理這兩種可能性..
SELECT * FROM MyTable
WHERE refNumber in (LPAD(:value,5,'0'),LTRIM(:value, '0'))
如果 '00123' 或 '123' 作為值傳入,則上述查詢將在refNumber.
并假設您在 refNumber 上有一個索引,請快速有效地執行此操作。
如果可能有未知數量的前導零,那么您會陷入困境
SELECT * FROM MyTable
WHERE LTRIM(refNumber,'0') = LTRIM(:value, '0')
但是,如果您的 Db2 的平臺/版本支持對運算式的索引,您會為了效率而創建一個
create index myidx
on MyTable (LTRIM('0' from refNumber))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/311379.html
上一篇:sql在哪里,所以我可以看到hibernate存盤庫用來過濾findById()中的記錄的標準”
下一篇:是否可以從物體和串列物件中查詢
