前情提要
某表有一列是印刷版丝印位置,其包含的字母是特定电子元件标识,我要根据不同元器件进行一些查询,对某列(符号标识)开游标放进定义变量来查某表,条件要模糊查询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