这句简单的sql语句哪里错了?判断字符串里有没有问号‘?’

fihuang 2009-05-11 04:57:07
这句简单的sql语句哪里错了?
我要判断字符串里有没有问号‘?’

select *
from table_a
where answer not like '%?%'
or answer not like '%?%';

但是选出来的数据里还有问号?而且是连续多个问号,例如“我的天???下雨了”
到底哪里错了!
...全文
582 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
xieyang702 2011-09-01
  • 打赏
  • 举报
回复
转义试试
superhsj 2009-05-18
  • 打赏
  • 举报
回复
这个要修改客户端的字符集与数据库的字符集一致了就能正常显示汉字了
[Quote=引用 45 楼 fihuang 的回复:]
对的,是这个原因。怎么操作呢?
[/Quote]
fihuang 2009-05-18
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 superhsj 的回复:]
我怀疑可能是字符集的问题,导致某些字显示成了?,而他本身并不是?,所以用lz的语句没有筛选掉
[/Quote]对的,是这个原因。怎么操作呢?
sugar8763 2009-05-17
  • 打赏
  • 举报
回复
对不起,我想我是说错了,应该是or 改成and ,还有就是把存在中英文问题,把中英文条件都加进去才好,我测试过了
sugar8763 2009-05-17
  • 打赏
  • 举报
回复
我认为不是中英文的问题,而是那个问号需要转义才行,你的记录为

今天天气不好????

这就要求 ? 前面有若干字符,?后面有若干字符,?用转义字符转义,试一试吧
wangsong145 2009-05-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 fihuang 的帖子:]
这句简单的sql语句哪里错了?
我要判断字符串里有没有问号‘?’

select *
from table_a
where answer not like '%?%'
or answer not like '%?%';

但是选出来的数据里还有问号?而且是连续多个问号,例如“我的天???下雨了”
到底哪里错了!
[/Quote]
你的后面的那个问号是中文状态下的吧?
liangzzzzzzz 2009-05-16
  • 打赏
  • 举报
回复
逻辑上SQL语句没有错,可能是全角半角 或是字符集的关系。
MasterYang 2009-05-15
  • 打赏
  • 举报
回复
对,楼主考虑下是不是字符集出了乱码,导致汉字以“?”显示
superhsj 2009-05-15
  • 打赏
  • 举报
回复
我怀疑可能是字符集的问题,导致某些字显示成了?,而他本身并不是?,所以用lz的语句没有筛选掉
lwh_1024 2009-05-15
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 yfq85825 的回复:]
SQL code
select * from table_1 where answer not like '%?%'



lz是不把引号'打成中文的了啊
[/Quote]

中文的单引号是(‘)吧
显然楼主的单引号不是中文的
gudujian607 2009-05-14
  • 打赏
  • 举报
回复
Select * From Table_a Where Instr(Answer, '?') = 0;
JS_Beginner 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fihuang 的回复:]
SQL code
select *
from table_a
where ...
and id not in (select id
from table_a
where answer like '%?%'
and answer like '%?%')
[/Quote]
我是这么写的,在PL/SQL中执行,oracle 9i,没有问题啊。成功过滤了。
不知道lz的不能过滤是怎么回事?
newlysl 2009-05-14
  • 打赏
  • 举报
回复
怎么就没人发现呢
[Quote=引用 33 楼 yfq85825 的回复:]
SQL code
select * from table_1 where answer not like '%?%'



lz是不把引号'打成中文的了啊
[/Quote]
yfq85825 2009-05-14
  • 打赏
  • 举报
回复

select * from table_1 where answer not like '%?%'

lz是不把引号'打成中文的了啊
newlysl 2009-05-14
  • 打赏
  • 举报
回复
继续顶下
Well 2009-05-14
  • 打赏
  • 举报
回复
select *
from table_a
where TO_SINGLE_BYTE(answer) not like '%?%'
lwh_1024 2009-05-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 fihuang 的回复:]
引用 12 楼 newlysl 的回复:
*号前加个distinct...
没用

select id
from table_a
where answer like '%?%'
or answer like '%?%'
这个的结果里面居然没有那个带问号的id
[/Quote]

现在问题是LZ的这个语句中查不到那个带问号的记录(而这里应该能够找到那条记录)
那么LZ应该找到那条记录,查看一下里面问号是如何写进去的?
可以将那个问号复制出来,然后粘贴到like语句后面进行查询,看能不能查出来?
lwh_1024 2009-05-12
  • 打赏
  • 举报
回复
LZ这个情况很奇怪
按照LZ的描述,sql语句应该是没有问题的,所以建议LZ仔细检查一下其他方面
我建了一个临时表tb_test测试时正常的
id remart
---------------------------------
1 今天天气不好????的确
2 今天天气很好???的确
3 今天天气不好也不坏

SQL> select id from tb_test where remark like '%?%' or remark like '%?%';

ID
----------
1
2

SQL> select id from tb_test
2 where id not in (select id from tb_test where remark like '%?%' or remark like '%?%');

ID
----------
3

SQL>
fihuang 2009-05-12
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 zzh307924323 的回复:]
不知道 lz 是不是这个意思

就是通过一条sql 显示某列中不包括 ?号的全部信息 是这样的吗?


直接就一个 sql语句就可以啊 比方说


SELECT * FROM 表格名称 WHERE 列名 NOT LIKE '%?%'


这样的话 就把某列中包括问号的全部去掉 剩下不包括问号的 信息 就会显示出来。。


不知道 lz 是不是这个意思?
[/Quote]
就是这个意思,但是这样选出来的还是会有有问号的数据的。
所以我觉得很奇怪,为什么会这样?
zzh307924323 2009-05-12
  • 打赏
  • 举报
回复
不知道 lz 是不是这个意思

就是通过一条sql 显示某列中不包括 ?号的全部信息 是这样的吗?



直接就一个 sql语句就可以啊 比方说



SELECT * FROM 表格名称 WHERE 列名 NOT LIKE '%?%'


这样的话 就把某列中包括问号的全部去掉 剩下不包括问号的 信息 就会显示出来。。


不知道 lz 是不是这个意思?
加载更多回复(27)

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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