下面給出任意字符串,該字符串長度未定,只知道該字符串有許多個‘-’連接起來的,現在要把最后一個‘-’后面的字符替換掉為指定串。
假如字符串為:'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'