\b切字符串 只保留数字、字母

USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(
	id VARCHAR(50) PRIMARY KEY,
	uname NVARCHAR(20)	
)
GO
INSERT INTO t VALUES ('2018041A1243HS001','a')
INSERT INTO t VALUES ('2018041A1243HS002','b')
INSERT INTO t VALUES ('2018041A1243HS003','c')
INSERT INTO t VALUES ('2018041A1243HS004','d')
GO
------ 以上为测试表 ------

--增加专门的过滤数字的函数
IF OBJECT_ID('dbo.Fun_GetCharList ') IS NOT NULL
	DROP FUNCTION dbo.Fun_GetCharList 
GO
-- =============================================
-- Author:		yenange
-- Create date: 2018-11-13
-- Description:	
-- =============================================
CREATE FUNCTION dbo.Fun_GetCharList 
(
	@str NVARCHAR(MAX)
)
RETURNS 
@table TABLE 
(
	rowNum INT IDENTITY(1,1),
	item NVARCHAR(MAX)
)
AS
BEGIN
	DECLARE @tmp NVARCHAR(MAX),@single NVARCHAR(MAX),@idx INT,@flag BIT
    SET @idx=1;
    SET @flag=0;
    WHILE @idx<=LEN(@str)+1
    BEGIN
    	SET @tmp=SUBSTRING(@str,@idx,1)
    	--如果为数字,则累加
    	IF (@tmp>='0' AND @tmp<='9')
    		OR
    		(@tmp>='a' AND @tmp<='z')
    		OR
    		(@tmp>='A' AND @tmp<='Z')
    	BEGIN
    		SET @single=ISNULL(@single,'')+@tmp;
    		SET @flag=1
    	END
    	--否则
    	ELSE IF @flag=1
    	BEGIN
    		INSERT INTO @table(item)
    		SELECT @single
    		SET @single=''
    		SET @flag=0
    	END
    	
    	SET @idx=@idx+1
    END
    RETURN
END
GO

--查询
DECLARE @s NVARCHAR(MAX)=N'2018041A1243HS001
	2
3'
--
SELECT * FROM t WHERE id IN (
	SELECT item FROM dbo.Fun_GetCharList(@s)
)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值