ltrim() 函式的缺陷
今天同事問了一個問題,如果一列,想把最後'45'兩個字串去掉,該如何寫,我當時想了兩個辦法,不過都有一些缺陷:
1. select replace('12345','45','') from dual;
--123
缺陷:如果前面的字串中還有45,而不是最後兩位的話,也會被替換成空。
2. select rtrim('12345','45') from dual;
--123
缺陷:如果倒數第三位是4或5,也會被截掉,因為ltrim(x,y) 函式是按照y中的字元一個一個截掉x中的字元,並且是從左邊開始執行的,只要遇到y中有的字元, x中的字元都會被截掉, 直到在x的字元中遇到y中沒有的字元為止函式命令才結束 .
e.g.
SQL> select ltrim('109224323','109') from dual;
LTRIM('109224323','109')
------------------------
224323
------------------------
224323
這個的功能應該都知道的噢~~ 再來看一個:
SQL> select ltrim('10900094323','109') from dual;
LTRIM('10900094323','109')
---------------------------
4323
---------------------------
4323
是不是有點迷糊了?按道理說應該是00094323的結果嘛~~ 再來看兩個對比的:
SQL> select ltrim('10900111000991110224323','109') from dual;
LTRIM('10900111000991110224323
------------------------------
224323
------------------------------
224323
SQL> select ltrim('109200111000991110224323','109') from dual;
LTRIM('10920011100099111022432
------------------------------
200111000991110224323
------------------------------
200111000991110224323
是不是有這樣的疑問:為什麼第二個查詢語句多了一個2就沒被截了呢?
再來看一個:
SQL> select ltrim('902100111000991110224323','109') from dual;
LTRIM('90210011100099111022432
------------------------------
2100111000991110224323
------------------------------
2100111000991110224323
我想大家都都會想:按道理說是截109的值,為什麼90也被截了?
總結:ltrim(x,y) 函式是按照y中的字元一個一個截掉x中的字元,並且是從左邊開始執行的,只要遇到y中有的字元, x中的字元都會被截掉, 直到在x的字元中遇到y中沒有的字元為止函式命令才結束 .
網友回答: 函式將109當成了三個字元以1,0,9在字串開始直道出現不為1,0,9這三個字元中的任意一個開始擷取;
可以看出,ltrim函式是從匹配函式開始之後出現在子串中任何字元都被遮蔽掉了;
可以看出,ltrim函式是從匹配函式開始之後出現在子串中任何字元都被遮蔽掉了;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9252210/viewspace-676456/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 字串函式 ltrim ()字串函式
- oracle ltrim使用Oracle
- PHP程式碼審計01之in_array()函式缺陷PHP函式
- PHP程式碼審計02之filter_var()函式缺陷PHPFilter函式
- redis實現分散式鎖天然的缺陷Redis分散式
- php之 trim ltrim rtrim 小坑PHP
- main函式的入口函式AI函式
- js函式 函式自呼叫 返回函式的函式 (閉包)JS函式
- 使用bind()函式的產生的函式用作建構函式this的指向函式
- 函式定義、函式的引數、函式的預設引數函式
- 箭頭函式、簡寫函式、普通函式的區別函式
- 函式宣告和函式表示式的區別函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- 閉包函式(匿名函式)的理解函式
- 函式: 函式是怎麼使用的?函式
- Rust中的into函式和from函式Rust函式
- closest()函式parent()函式的區別函式
- ascii函式和substr函式的用法ASCII函式
- 函式式 Java 到函式式 Kotlin 的轉換函式JavaKotlin
- Oracle 函式大全(字串函式,數學函式,日期函式,邏輯運算函式,其他函式)Oracle函式字串
- 【函式式 Swift】函式式思想函式Swift
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- 【函式】Oracle函式系列(2)--數學函式及日期函式函式Oracle
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- 類的建構函式和解構函式函式
- gethostbyname函式和getservbyname函式的應用函式
- Sql 中的 left 函式、right 函式SQL函式
- 函式外與函式內的變數函式變數
- prop()函式和attr()函式的區別函式
- 簡單的printf函式與scnaf函式函式
- JS中函式內套函式的呼叫JS函式
- 【函式】oracle視窗函式over()的理解函式Oracle
- C++的函式和模板函式 (轉)C++函式
- ton函式函式hash的兩種形式函式
- strcpy函式和memcpy函式的區別函式memcpy
- 缺陷和缺陷報告
- python內建函式-eval()函式與exec()函式的區別Python函式
- 如何使用函式指標呼叫類中的函式和普通函式函式指標