关于T-sql 里 like 的用法??

coollele 2008-11-10 05:38:14
关于T-sql 语法

select top 20 *
from sale_list
where sale_number in (select sale_number from sale_total)
and (sale_code like '200811521182%' or sale_number like '200811521182%' or sale_adder like '0%' or op like '200811521182%') order by sale_date desc

以上相同的语句运行于 sql2000 与 sql2005 相同数据的数据库中;结果不一样??

*** ★ sql2000中会将 like 模糊查询的结果显示出来;而sql2005查不出结果 null

用SQL2005来执行查询时,检查语法通过后,会将代码改为以下的代码,执行后什么都没有;

SELECT TOP 20 id, sale_number, sale_code, sale_name, sale_yprice, sale_discount, sale_price, sale_count, sale_date,
create_date, sale_adder, op
FROM sale_list
WHERE (sale_number IN
(SELECT sale_number
FROM sale_total)) AND (sale_code LIKE '200811521182%') OR
(sale_number IN
(SELECT sale_number
FROM sale_total AS sale_total_3)) AND (sale_number LIKE '200811521182%') OR
(sale_number IN
(SELECT sale_number
FROM sale_total AS sale_total_2)) AND (sale_adder LIKE '0%') OR
(sale_number IN
(SELECT sale_number
FROM sale_total AS sale_total_1)) AND (op LIKE '200811521182%')
ORDER BY sale_date DESC







请问?/??

是不是我哪错了,还是有别的写法? 又或是两个数据库的方法不一样???


请指教????
...全文
309 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
chendi0301 2009-01-10
我没碰到这个情况,还是来顶一下
回复
这里都是数字,所以应该没有大小写敏感问题

估计是相关字段的数据类型问题,这些字段可能都是数字字段

对于数字字段,尽量不要用like 查询,必须用like 查询的时候,显式转换下类型

比如
sale_number like '200811521182%'
改成
cast(sale_number as varchar(30)) like '200811521182%'
回复
CodeShow 2008-11-18
看到头晕眼花了
回复
zdgood 2008-11-15
你可以把2005中变化后的语句放到2000中运行试试,看看结果一样吗?
回复
niedx2007 2008-11-14
请教各位,如何像百度那样从书的数据库表中实现模糊查询:比如输入:" C 精髓 教程 "从数据库中就能把含有上面关键字的书全部找出来,注意字符串中间是有空格的,个数不定,谢谢
回复
sqn1982 2008-11-10
逻辑没问题
回复
等不到来世 2008-11-10
语法没错误,数据有问题。
回复
ws_hgo 2008-11-10
把表结构
贴出来
做下
回复
幸运的意外 2008-11-10
SQL 2005区分大小写,注意一下.确保大小写正确再试试看.
回复
dobear_0922 2008-11-10
代码没有错误,应该是两个库数据不同
回复
rucypli 2008-11-10
你count一下表中数据是否一样多
回复
hyde100 2008-11-10
貌似逻辑没有错误,检查两个数据库数据
回复
水族杰纶 2008-11-10
[Quote=引用楼主 coollele 的帖子:]
关于T-sql 语法

select top 20 *
from sale_list
where sale_number in (select sale_number from sale_total)
and (sale_code like '200811521182%' or sale_number like '200811521182%' or sale_adder like '0%' or op like '200811521182%') order by sale_date desc

以上相同的语句运行于 sql2000 与 sql2005 相同数据的数据库中;结果不一样??

*** ★ sql2000中会将 like 模糊查询的结果显示出来;而sql2…
[/Quote]
確定兩個數據庫中的表中數據一致?字段類型一致?
回复
nalnait 2008-11-10
可能是有null的情况,你这样:


select top 20 *
from sale_list
where sale_number in (select sale_number from sale_total)
and (isnull(sale_code,'') like '200811521182%' or isnull(sale_number,'') like '200811521182%' or isnull(sale_adder,'') like '0%' or isnull(op,'') like '200811521182%') order by sale_date desc

回复
Tomato77 2008-11-10
逻辑没问题
回复
相关推荐
发帖
应用实例
创建于2007-09-28

2.7w+

社区成员

MS-SQL Server 应用实例
申请成为版主
帖子事件
创建了帖子
2008-11-10 05:38
社区公告
暂无公告