記乙個開發是遇到的坑之Oralce 字串排序

2022-07-16 14:06:13 字數 819 閱讀 4449

簡單描述一下情況,就是儲存過程中用乙個字串型別的字段作為患者就診的排序號,結果莫名發現叫完1號後叫了11、12等患者。使用者的反饋不一定準確,自己加了日誌的,趕緊拷貝日誌來觀察一下。結果發現實際情況就是這樣的,一邊說著不應該呀,一邊開始看**,乙個個分析排序用到的字段,經過分析後發現由於這個欄位是字串所以排序規則是乙個字元乙個字元的比較的,單獨寫語句測試一下,果然如此。

with t as

(select '11' str

from dual

union all

select '2' str from dual

union all

select '3' str from dual

union all

select '21' str from dual

union all

select '30' str from dual

union all

select '1' str from dual)

select * from t order by str;

輸出結果如下:

1    1

2    11

3    2

4    21

5    3

6    30

由於該字段會儲存中文字元,最終利用 狀態 欄位和取字串的數字部分轉換為數值,然後進行排序。至於

取其中的數字部分,使用正規表示式

to_number(regexp_substr(nvl(欄位a,0),'[0-9]+'))

記錄一下自己遇到的坑,可能很簡單,但是容易忽視。勤於實踐、樂於記錄,熱愛分享。

記乙個ArrayList set 的坑

在專案中遇到需要把arraylist的第乙個位置覆蓋成新的值 而恰巧第乙個位置沒有任何值,然後就拋越位異常了 arraylistobjects new arraylist objects.set 0,1 arraylist set public e set int index,e element a...

關於TSnackbar遇到的乙個坑

這幾天研究了一下頂部snackbar,發現網上有個神器,tsnackbar 感謝作者!但是遇到了乙個問題 這可急壞了我,研究了一下原始碼,然後跟蹤了一下,定位到自定義控制項的內部,但是看了半天也沒發現什麼問題,後來想著這種inflate錯誤一大半原因都是布局導致的,所以我開啟了布局檔案,逐個對照,漸...

2020 12 05 今天遇到的乙個坑

public class aistatemove aistate space 10 go to this state if passive event occures public aistate passiveaistate end point for moving hideininspector...