SQL如何提取字符串中的字母?

問題描述數據庫

咱們在進行數據處理時,可能常常須要對不一樣類型的字符進行抽取。好比一些產品型號,批次之類的會使用字母表示,這個時候該如何提取這些數據呢?express

問題分析ide

無論是字母,仍是數字,咱們均可以使用相應的匹配規則來抽取出來。可是因爲字母是混合在字符串中,咱們須要循環對其進行匹配。函數

具體解法測試

咱們建立一個函數,經過調用這個函數來找出全部的字母。code

CREATE FUNCTION dbo.GET_LETTER (@Str VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^a-z]%', @Str) > 0
BEGIN
SET @Str = STUFF(@Str, PATINDEX('%[^a-z]%', @Str), 1, '');
END;
RETURN @Str;
END;
GO

代碼解讀blog

上面的解法主要使用了兩個函數,PATINDEX函數和STUFF函數開發

PATINDEX函數字符串

PATINDEX ( '%pattern%' , expression )
返回pattern字符串在表達式expression裏第一次出現的位置,起始值從1開始算。產品

例如

SELECT PATINDEX('%SQL%','SQL數據庫開發')
結果:

SQL如何提取字符串中的字母?

由於SQL就在第一位,因此返回結果爲1

STUFF函數

STUFF ( expression1 , start , length ,expression2 )

字符串expression1 從start位置開始,刪除長度爲length的字符後,在start後面填充expression2。

例如

SELECT STUFF('SQL,開發',4,1,'數據庫')

結果:

SQL如何提取字符串中的字母?

上面的示例是將","刪除後,替換成了"數據庫"

測試函數

理解完上面的函數,咱們來測試一下咱們自定義的函數GET_LETTER ()

SELECT dbo.GET_LETTER('SQL數1據2庫3開4發road')

結果:

SQL如何提取字符串中的字母?

這與咱們預期的結果一致,證實這個自定義函數是可行的。

以爲不錯,歡迎轉發分享給更多人,讓有須要的人也看到。

相關文章
相關標籤/搜索