SQL server模糊查询LIKE 变量

前情提要

某表有一列是印刷版丝印位置,其包含的字母是特定电子元件标识,我要根据不同元器件进行一些查询,对某列(符号标识)开游标放进定义变量来查某表,条件要模糊查询like这个定义变量。

SQL server模糊查询LIKE 变量

如果你是看标题进来的,直接看这里结论。

开始我是LIKE ‘%’+ @Sym +’%’,不行,网页查解决办法几乎没有

LIKE char(37)+@Sym+char(37),OK,char(37)是%的ASCII 

如果你对前情提要感兴趣可以继续下面阅读,

把字符串的字母提取出来

CREATE TABLE #tmp1 (hName NVARCHAR(50))
DECLARE @Str NVARCHAR(20)
	DECLARE mycursor CURSOR FOR
	SELECT Location from TableName 
	OPEN mycursor
	FETCH NEXT FROM mycursor INTO @Str
	WHILE @@FETCH_STATUS = 0
	BEGIN
WHILE PATINDEX('%[^A-Z]%', @Str) > 0
 BEGIN
 SET @Str = STUFF(@Str, PATINDEX('%[^A-Z]%', @Str), 1, '');
 END
INSERT INTO #tmp1 values(@Str)
FETCH NEXT FROM mycursor INTO @Str
END
	CLOSE mycursor
	DEALLOCATE mycursor
SELECT distinct hName FROM #tmp1 
drop TABLE #tmp1

后面我开游标LIKE变量也解决后发现,我用COUNT(*)的一些结果对不上,发现是LIKE 的@Sym不唯一,比如说@Sym='R',这样LIKE把'SR'、'RS'也算进去了。最后解决办法是用临时表#tmp把满足条件的要查的列放进去,再开游标针对包含标识符号字符串的列全提取字母,又update替换原来的。后面继续用#tmp1开游标(不过我改成@tmp1表变量了),直接对#tmp操作,条件也可以直接=@Sym了,到头来LIKE变量不需要了,哈哈(掩面)。

剩下就很简单了,估计没人感兴趣就到此为止了。88

对了,临时表别忘了:

    truncate table #tmp
    drop table #tmp

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值