几个SQL函数

-- 提取数字
IF OBJECT_ID ( ' DBO.GET_NUMBER2 ' ) IS NOT NULL
DROP FUNCTION DBO.GET_NUMBER2
GO
CREATE FUNCTION DBO.GET_NUMBER2( @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( ' 呵呵ABC123ABC ' )
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值