SQL 多条件查询 IN 成功 以及 patindex用法

本文介绍 SQL 中 patindex 函数的应用场景,演示如何利用 patindex 函数进行字符串匹配查询,通过具体示例展示了如何筛选出包含特定子串的数据记录,并提供了一种使用临时表的方法来进一步处理查询结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//先声明

DECLARE @BARANDID VARCHAR(100)


patindex 用法,例如 YHBH =10,20,30  如果 我要单独值查询满足20条件的记录呢?SFRBH=20


SET @BARANDID= (SELECT YHBH FROM SKJBXX_FPBHQD WHERE YLJGBH=@YLJGBH AND patindex('%,"+SFRBH+",%',',' + YHBH + ',' )>0


exec('select MAX(FPXMBH) from dbo.MZ_FPDYJLB where DYRBH in ('+@BARANDID+') ') 

              

还可以使用临时表 功能 

CREATE TABLE #temp1
(
 CFBHs VARCHAR(8000)
)

INSERT INTO #temp1  SELECT cfbh from MZ_CFJLB WHERE YLJGBH=@YLJGBH AND MZBH=@MZBH

select * from tb where in (select * from #temp1)

### SQL Server 中删除字符串中的特殊字符 在 SQL Server 中,虽然没有直接提供专门用于移除字符串中所有特殊字符的内置函数,但是可以通过组合使用多个字符串函数来实现这一功能。一种常见的方式是利用 `PATINDEX` 和 `STUFF` 函数配合循环结构或者通过创建自定义函数来进行处理。 下面是一个简单的例子,展示如何构建一个 T-SQL 查询语句来移除给定字符串内的非字母数字字符: ```sql DECLARE @InputString NVARCHAR(MAX) = 'Schoo!l&Tea%cher'; WITH CTE AS ( SELECT CAST('' AS XML).value( 'for $i in sql:variable("@InputString")/text() return substring($i, fn:position(), 1)[fn:matches(substring($i, fn:position(), 1), "[A-Za-z0-9]")]', 'NVARCHAR(MAX)' ) CleanedString ) SELECT CleanedString FROM CTE; -- 结果将是 "SchoolTeacher" ``` 此方法采用 XQuery 表达式过滤掉不符合正则模式 `[A-Za-z0-9]` 的任何字符[^1]。 另一种更传统的方法涉及迭代遍历整个字符串并逐个检查每个字符是否属于允许保留的一组字符集内。如果遇到不允许的字符,则跳过它而不将其加入到最终的结果集中去。这种方法通常会涉及到游标的使用或者是递归公用表表达式的应用,在性能上可能不如上述基于XQuery的方法高效[^2]。 对于频繁执行此类操作的情况,建议考虑编写用户定义函数 (UDF),以便于重复调用和维护代码整洁度。例如: ```sql CREATE FUNCTION dbo.RemoveSpecialCharacters (@str NVARCHAR(MAX)) RETURNS NVARCHAR(MAX) AS BEGIN DECLARE @result NVARCHAR(MAX); SET @result = ''; WITH Numbers(n) AS ( SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) n FROM master..spt_values v WHERE v.type='P' ) SELECT @result += CASE WHEN SUBSTRING(@str,n,1) LIKE '[^a-zA-Z0-9]' THEN '' ELSE SUBSTRING(@str,n,1) END FROM Numbers WHERE n <= LEN(@str); RETURN @result; END; GO ``` 之后就可以像这样简单地调用了: ```sql SELECT dbo.RemoveSpecialCharacters('Schoo!l&Tea%cher'); -- 输出 SchoolTeacher ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值