用SQL替換最后一個指定字符后面的所有字符


下面給出任意字符串,該字符串長度未定,只知道該字符串有許多個‘-’連接起來的,現在要把最后一個‘-’后面的字符替換掉為指定串。

假如字符串為:'x1253-axebx-xcdx-o9kgl-3ddll-llllll-4lldfl',我們把最后一個‘-’后面的‘4lldfl’替換成‘1593654’,該如何寫SQL。

思路:

1.SQL的函數中沒有直接獲取最后的指定字符的位置。那我們如何獲取最后‘-’的位置呢?

2.我們只知道字符串的長度不會變,如果能將字符串倒序排列,獲取第一個‘-’的位置,再用字符安串長度減去第一個‘-’位置,那就是最后個‘-’的位置。 是吧。

3.所以 可以用到SQL 的REVERSE函數,該函數可以將字符串倒序排列,REVERSE('x1253-axebx-xcdx-o9kgl-3ddll-llllll-4lldfl')

4.獲取第一個‘-’的位置,用CHARINDEX函數,第一個參數查找字符,第二參數是字符串。即:CHARINDEX('-',REVERSE('x1253-axebx-xcdx-o9kgl-3ddll-llllll-4lldfl'))

5.現在是倒序排列的第一個‘-’,要獲取正常排序的串,我們應該用整體長度減去第4步的值。即:len('x1253-axebx-xcdx-o9kgl-3ddll-llllll-4lldfl')-CHARINDEX('-',REVERSE('x1253-axebx-xcdx-o9kgl-3ddll-llllll-4lldfl'))

6.因為第5步,沒有包括‘-’,所以要加上1才包括了最后一個‘-’。即:len('x1253-axebx-xcdx-o9kgl-3ddll-llllll-4lldfl')-CHARINDEX('-',REVERSE('x1253-axebx-xcdx-o9kgl-3ddll-llllll-4lldfl'))+1

7.我們可以用 left函數獲取,從左邊一直到后面的第N個字符再加上‘1593654’。即:left('x1253-axebx-xcdx-o9kgl-3ddll-llllll-4lldfl',len('x1253-axebx-xcdx-o9kgl-3ddll-llllll-4lldfl')-CHARINDEX('-',REVERSE('x1253-axebx-xcdx-o9kgl-3ddll-llllll-4lldfl'))+1)+'1593654'

8.整體的SQL如下:

 SELECT LEFT('x1253-axebx-xcdx-o9kgl-3ddll-llllll-4lldfl',LEN('x1253-axebx-xcdx-o9kgl-3ddll-llllll-4lldfl')-CHARINDEX('-',REVERSE('x1253-axebx-xcdx-o9kgl-3ddll-llllll-4lldfl'))+1)+'1593654'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM