SqlServer !=与<>

!=(不等于)(Transact-SQL)

测试某个表达式是否不等于另一个表达式(比较运算符)。如果任何一个操作数为 NULL,或两个都为 NULL,则返回 NULL。其功能与 <>(不等于)比较运算符相同。


<>(不等于)(Transact-SQL)

比较两个表达式(比较运算符)。当比较非空表达式时,如果左操作数不等于右操作数,则结果为 TRUE;否则结果为 FALSE。如果任何一个操作数为 NULL 或两个都为 NULL,则请参阅主题 SET ANSI_NULLS (Transact-SQL)

似乎存在个效率问题?
在使用 MyBatis 进行 SQL Server 开发时,如果你想将原本的**精确匹配**条件: ```xml <if test="pojo.name != null"> AND name = #{pojo.name} </if> ``` 改为**模糊搜索(LIKE 查询)**,你需要将 `=` 改为 `LIKE`,并使用 `%` 通配符。以下是修改后的写法。 --- ### ✅ 修改为模糊搜索(推荐写法) ```xml <if test="pojo.name != null and pojo.name != ''"> AND name LIKE '%' + #{pojo.name} + '%' </if> ``` --- ### 🔍 解释: - `LIKE`:SQL Server 中用于模式匹配的关键字。 - `'%' + #{pojo.name} + '%'`: - `+` 是 SQL Server 中字符串拼接的操作符。 - `%` 是通配符,表示任意字符出现任意次数。 - 前后加 `%` 表示包含匹配(即“包含关键词”)。 - 判断 `pojo.name != null and pojo.name != ''`:防止传入空字符串时也触发查询。 --- ### 📝 示例生成的 SQL 假设 `pojo.name = "张"`,则生成的 SQL 片段为: ```sql AND name LIKE '%张%' ``` 这会匹配如 `"张三"`、`"小张"`、`"姓张"` 等记录。 --- ### 💡 其他模糊匹配方式(可选) | 需求 | 写法 | |------|------| | 以某字符开头 | `AND name LIKE #{pojo.name} + '%'` | | 以某字符结尾 | `AND name LIKE '%' + #{pojo.name}` | | 完全匹配(原逻辑) | `AND name = #{pojo.name}` | --- ### ⚠️ 注意事项(SQL Server 特性) - SQL Server 使用 `+` 拼接字符串,**不是 `||`**(那是 Oracle/PostgreSQL)。 - 如果字段是 `NULL`,`LIKE` 不会匹配,这是正常行为。 - 若性能要求高,建议对 `name` 字段建立索引,但注意 `LIKE '%xxx%'` 无法使用索引最左前缀,可能影响性能。 --- ### ✅ 最佳实践建议 如果你希望更灵活地支持多种搜索方式,可以考虑在 POJO 中增加一个 `nameLike` 字段专门用于模糊查询: ```java private String nameLike; ``` 对应 XML: ```xml <if test="pojo.nameLike != null and pojo.nameLike != ''"> AND name LIKE '%' + #{pojo.nameLike} + '%' </if> ``` 这样可以和精确查询解耦。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值