有以下记录
id name
011 1
add 2
cdd 3
苏ee 4现在要查询出以上记录,select * from [table] where id between p1 and p2
如果我想查询出所有记录,p2要赋什么值?(主要是有一个id带汉字的)
id name
011 1
add 2
cdd 3
苏ee 4现在要查询出以上记录,select * from [table] where id between p1 and p2
如果我想查询出所有记录,p2要赋什么值?(主要是有一个id带汉字的)
解决方案 »
- SQL2008 维护计划 完整差异备份
- 2005 存储过程怎么加载在对应数据库里
- SQL语句有误....高手进来看看
- 100分 问CHECK约束问题 新手提问!!
- 在sql server 2000 计算字段中进行条件判断的问及此事题
- 在Oracle 里decode和group by 的用法
- 请教专家下面的SQL语句哪里错了吗?不知道要怎么改才正确,请专家指点
- 没办法!总是问些菜鸟问题!关于UNICODE!
- 33分!!我装完oracle后,发现enterprise 使用不了.怎样配置?????
- MS sql server 有没有类似 pl sql 的提交功能
- SQL查询不会写,请大家帮忙
- 同样的表,同样的nvarchar字段上的索引,同样的sql语句,sql2000/2005执行结果却不同,帮忙看下
但是有汉字的id出不来
只能查出
011 1
add 2
cdd 3这条出不来(苏ee 4)
create function fun_getPY(@str nvarchar(4000))
returns nvarchar(4000)
as
begin
declare @word nchar(1),@PY nvarchar(4000)
set @PY=''
while len(@str)>0
begin
set @word=left(@str,1)
--如果非汉字字符,返回原字符
set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901
then (select top 1 PY from (
select 'A' as PY,N'驁' as word
union all select 'B',N'簿'
union all select 'C',N'錯'
union all select 'D',N'鵽'
union all select 'E',N'樲'
union all select 'F',N'鰒'
union all select 'G',N'腂'
union all select 'H',N'夻'
union all select 'J',N'攈'
union all select 'K',N'穒'
union all select 'L',N'鱳'
union all select 'M',N'旀'
union all select 'N',N'桛'
union all select 'O',N'漚'
union all select 'P',N'曝'
union all select 'Q',N'囕'
union all select 'R',N'鶸'
union all select 'S',N'蜶'
union all select 'T',N'籜'
union all select 'W',N'鶩'
union all select 'X',N'鑂'
union all select 'Y',N'韻'
union all select 'Z',N'咗'
) T
where word>=@word collate Chinese_PRC_CS_AS_KS_WS
order by PY ASC) else @word end)
set @str=right(@str,len(@str)-1)
end
return @PY
end
--再试试
select * from
(select N'011' id, '1'name union all
select N'add',' 2' union all
select N'cdd',' 3' union all
select N'苏ee',' 4') t
where dbo.fun_getPY (id) between '' and 'zzz'
/*
id name
---- ----
011 1
add 2
cdd 3
苏ee 4(所影响的行数为 4 行)
*/
declare @tab table(id nvarchar(10),name varchar(10));
insert into @tab
select N'011','1' union all select N'add','2' union all
select N'cdd','3' union all select N'苏ee','4' ;
--用二进制比较。 注意字节数,0xffffffffffff 代表 3 个 unicode 字符
select * from @tab where cast(id as varbinary(20)) between 0x00 and 0xffffffffffff
/*
011 1
add 2
cdd 3
苏ee 4
*/
-- 更精确一点 N'苏ee' 对应
select cast(N'苏ee' as varbinary(20))
/*
0xCF8265006500
*/