排除 通配符怎么写?

qshzf 2016-07-28 11:24:00
排除 通配符怎么写?

比如我有一个 物资表
序号 名称 颜色
1 A H56
2 B D5
3 C D12
4 D C19
5 E C29
6 F C20
7 G C229

我想按用户填写的条件查询
select * from 物资表 where 颜色 like ‘C%’ 可以查询C开头的颜色

那么非C开头的怎么查询呢?
select * from 物资表 where 颜色 not like ‘C%’ 是不行的,因为 ‘C%’ 是程序传进来的。

select * from 物资表 where 颜色 like ‘^C%’ 又查询不出来


怎样才能查出这样的结果呢

序号 名称 颜色
1 A H56
2 B D5
3 C D12
...全文
505 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2016-07-28
  • 打赏
  • 举报
回复
如果‘C%’不能变, 把语句中的like替换为not like即可.
中国风 2016-07-28
  • 打赏
  • 举报
回复
[^C]%--非C这样传
qshzf 2016-07-28
  • 打赏
  • 举报
回复
引用 1 楼 fredrickhu 的回复:
%C是程序传进来的 不是一样可以用NOT LIKE查吗? 难道用CHARINEX...<0?
程序不知道用户是要查询包含,还是不包含。。。
--小F-- 2016-07-28
  • 打赏
  • 举报
回复
%C是程序传进来的 不是一样可以用NOT LIKE查吗? 难道用CHARINEX...<0?
卖水果的net 2016-07-28
  • 打赏
  • 举报
回复
在程序里处理比较方便,代码改不了吗?
zbdzjx 2016-07-28
  • 打赏
  • 举报
回复
最好,是在程序的界面中,增加一下下拉框,去选择“包含”还是“不包含”。这样,就可以对应like还是not like了。
中国风 2016-07-28
  • 打赏
  • 举报
回复
如果是多字符取非,在接口传参里处理 比如存储过程 P1 参数1=条件,参数2=是/非 --是 patindex('c22%',字段)>0 或 like 'c22%' --非 patindex('c22%',字段)=0 或 not like 'c22%'
qshzf 2016-07-28
  • 打赏
  • 举报
回复
引用 3 楼 roy_88 的回复:
[^C]%--非C这样传
比如说,颜色不包含 22 的所有数据怎么查询?
qshzf 2016-07-28
  • 打赏
  • 举报
回复
引用 3 楼 roy_88 的回复:
[^C]%--非C这样传
^的用法没太搞明白, [^C]% 查询出来的是非C开头的 但是非 C22 开头的怎么也写不出来
iamggggs 2016-07-28
  • 打赏
  • 举报
回复
你这根本就不是sql语法问题,是你自己程序传递函数的设计问题,语法上本来就是一个not like就解决了的事情。
唐诗三百首 2016-07-28
  • 打赏
  • 举报
回复
既然‘C%’不能变, 也不能写 not like... 建议不要人为的制造诸多限制, 把简单的问题复杂化了.
qshzf 2016-07-28
  • 打赏
  • 举报
回复
引用 4 楼 ap0405140 的回复:
如果‘C%’不能变, 把语句中的like替换为not like即可.
就是因为不能写 not like。。。

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧