日期:2014-05-17  浏览次数:20671 次

各位大神,求救!SQL 2005查詢問題
本人在使用數據庫發現一個查詢問題,請各位高手幫忙解決:
例如,我有一個表(Test),裡面只有一個字符型nvarchar字段(Ptext),字段值如下:

-AM001
-AM020
-AM030
-ZM200
-ZM300
AM100
AM101
ZM100
ZM200
ZM201
我現在需要查詢范圍為 -AM001 至 -ZM200 的記錄,查詢語句如下:
SELECT *  FROM Test  WHERE (Ptxt >= '-AM001') AND (Ptxt <= '-ZM200')
但是它顯示結果為:(8條記錄)
-AM001
-AM020
-AM030
-ZM200
AM100
AM101
ZM100
ZM200
但是正確的結果應該是:(4條記錄)
-AM001
-AM020
-AM030
-ZM200
為什麼SQL 2005將不帶-號的顯示出來了呢?有什麼辦法可以查詢到我想要的正確結果(4條記錄)
SQL?2005查詢問題

------解决方案--------------------

declare @tab table(ptext varchar(10) collate  Chinese_PRC_BIN)
insert into @tab
select '-AM001' union
select '-AM020' union
select '-AM030' union
select '-ZM200' union
select '-ZM300' union
select 'AM100' union
select 'AM101' union
select 'ZM100' union
select 'ZM200' union
select 'ZM201'
select * from @tab where ptext>='-AM001' and ptext<='-ZM200'


这样应该就只有四条了,跟排序规则有关。
------解决方案--------------------
把你的语句改成下面的就可以了哈:


--不用去修改表中字段的排序规则
--而是直接在查询中修改排序规则为 二进制排序,这种方式比较灵活
SELECT *  FROM Test  
WHERE Ptxt >= '-AM001' collate Chinese_PRC_BIN
      AND Ptxt <= '-ZM200' collate Chinese_PRC_BIN