日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【转】SQL函数:字符串中提取数字,英文,中文,过滤重复字符

發布時間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】SQL函数:字符串中提取数字,英文,中文,过滤重复字符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SQL函數:字符串中提取數字,英文,中文,過濾重復字符?

--提取數字
IF?OBJECT_ID('DBO.GET_NUMBER')?IS?NOT?NULL
DROP?FUNCTION?DBO.GET_NUMBER
GO
CREATE?FUNCTION?DBO.GET_NUMBER(@S?VARCHAR(100))
RETURNS?VARCHAR(100)
AS
BEGIN
WHILE?PATINDEX('%[^0-9]%',@S)?>?0
BEGIN
set?@s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
RETURN?@S
END
GO
--測試
PRINT?DBO.GET_NUMBER('呵呵ABC-12,3ABC')
GO
--123
--
------------------------------------------------------------------
--
提取英文
IF?OBJECT_ID('DBO.GET_STR')?IS?NOT?NULL
DROP?FUNCTION?DBO.GET_STR
GO
CREATE?FUNCTION?DBO.GET_STR(@S?VARCHAR(100))
RETURNS?VARCHAR(100)
AS
BEGIN
WHILE?PATINDEX('%[^a-z]%',@S)?>?0
BEGIN
set?@s=stuff(@s,patindex('%[^a-z]%',@s),1,'')
END
RETURN?@S
END
GO
--測試
PRINT?DBO.GET_STR('呵呵ABC123ABC')
GO
--------------------------------------------------------------------
--
提取中文
IF?OBJECT_ID('DBO.CHINA_STR')?IS?NOT?NULL
DROP?FUNCTION?DBO.CHINA_STR
GO
CREATE?FUNCTION?DBO.CHINA_STR(@S?NVARCHAR(100))
RETURNS?VARCHAR(100)
AS
BEGIN
WHILE?PATINDEX('%[^吖-座]%',@S)?>?0
SET?@S?=?STUFF(@S,PATINDEX('%[^吖-座]%',@S),1,N'')
RETURN?@S
END
GO
PRINT?DBO.CHINA_STR('呵呵ABC123ABC')
GO
--------------------------------------------------------------------
--
過濾重復字符
IF?OBJECT_ID('DBO.DISTINCT_STR')?IS?NOT?NULL
DROP?FUNCTION?DBO.DISTINCT_STR
GO
CREATE?FUNCTION?DBO.DISTINCT_STR(@S?NVARCHAR(100),@SPLIT?VARCHAR(50))
RETURNS?VARCHAR(100)
AS
BEGIN
IF?@S?IS?NULL?RETURN(NULL)
DECLARE?@NEW?VARCHAR(50),@INDEX?INT,@TEMP?VARCHAR(50)
IF?LEFT(@S,1)<>@SPLIT
SET?@S?=?@SPLIT+@S
IF?RIGHT(@S,1)<>@SPLIT
SET?@S?=?@S+@SPLIT
WHILE?CHARINDEX(@SPLIT,@S)>0?AND?LEN(@S)<>1
BEGIN
SET?@INDEX?=?CHARINDEX(@SPLIT,@S)
SET?@TEMP?=?LEFT(@S,CHARINDEX(@SPLIT,@S,@INDEX+LEN(@SPLIT)))
IF?@NEW?IS?NULL?
SET?@NEW?=?ISNULL(@NEW,'')+@TEMP
ELSE
SET?@NEW?=?ISNULL(@NEW,'')+REPLACE(@TEMP,@SPLIT,'')+@SPLIT
WHILE?CHARINDEX(@TEMP,@S)>0
BEGIN
SET?@S=STUFF(@S,CHARINDEX(@TEMP,@S)+LEN(@SPLIT),CHARINDEX(@SPLIT,@S,CHARINDEX(@TEMP,@S)+LEN(@SPLIT))-CHARINDEX(@TEMP,@S),'')
END
END
RETURN?RIGHT(LEFT(@NEW,LEN(@NEW)-1),LEN(LEFT(@NEW,LEN(@NEW)-1))-1)
END
GO
PRINT?DBO.DISTINCT_STR('A,A,B,C,C,B,C,',',')
--A,B,C
GO
--------------------------------------------------------------------
--
過濾重復字符2
IF?OBJECT_ID('DBO.DISTINCT_STR2')?IS?NOT?NULL
DROP?FUNCTION?DBO.DISTINCT_STR2
GO
CREATE?FUNCTION?DBO.DISTINCT_STR2(@S?varchar(8000))
RETURNS?VARCHAR(100)
AS
BEGIN
IF?@S?IS?NULL?RETURN(NULL)
DECLARE?@NEW?VARCHAR(50),@INDEX?INT,@TEMP?VARCHAR(50)
WHILE?LEN(@S)>0
BEGIN
SET?@NEW=ISNULL(@NEW,'')+LEFT(@S,1)
SET?@S=REPLACE(@S,LEFT(@S,1),'')
END
RETURN?@NEW
END
GO
SELECT?DBO.DISTINCT_STR2('AABCCD')
--ABCD
GO

--------------------------------------------------------------------
IF?OBJECT_ID('DBO.SPLIT_STR')?IS?NOT?NULL
DROP?FUNCTION?DBO.SPLIT_STR
GO
CREATE?FUNCTION?DBO.SPLIT_STR(
@S?varchar(8000),??????--包含多個數據項的字符串
@INDEX?int,?????????????--要獲取的數據項的位置
@SPLIT?varchar(10)?????--數據分隔符
)
RETURNS?VARCHAR(100)
AS
BEGIN
IF?@S?IS?NULL?RETURN(NULL)
DECLARE?@SPLITLEN?int
SELECT?@SPLITLEN=LEN(@SPLIT+'A')-2
WHILE?@INDEX>1?AND?CHARINDEX(@SPLIT,@S+@SPLIT)>0
SELECT?@INDEX=@INDEX-1,@S=STUFF(@S,1,CHARINDEX(@SPLIT,@S+@SPLIT)+@SPLITLEN,'')
RETURN(ISNULL(LEFT(@S,CHARINDEX(@SPLIT,@S+@SPLIT)-1),''))
END
GO
PRINT?DBO.SPLIT_STR('AA|BB|CC',2,'|')
--
GO

轉載于:https://www.cnblogs.com/northstar/archive/2011/11/16/2251209.html

總結

以上是生活随笔為你收集整理的【转】SQL函数:字符串中提取数字,英文,中文,过滤重复字符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。