真的没人能解决这个问题吗?急!!!(200分)

  • 主题发起人 主题发起人 lyhold
  • 开始时间 开始时间
L

lyhold

Unregistered / Unconfirmed
GUEST, unregistred user!

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1503948
 
你可以参考下面这个函数,这个函数可以正确识别字符串的长度,比如"ab你好"返回6
function strlen(str)
dim p_len
p_len=0
strlen=0
if tri
m(str)<>"" then
p_len=len(trim(str))
for xx=1 to p_len
if asc(mid(str,xx,1))<0 then
strlen=int(strlen) + 2
else
strlen=int(strlen) + 1
end if
next
end if
end function
 
这是服务器的语言设置问题,SQL Server 2000把语言自动设置为简体中文,
你可以使用语句
SET LANGUAGE us_english
将服务器默认语言改为英文试试!
也可以看SQL Server联机丛书!
 
我转到2000下,看看有没有转换
 
All are same!

select au_lname,len(CAST (au_lname as char)) from pubs.dbo.authors where au_id='172-32-1176'
select au_lname,len(CAST (au_lname as varchar)) from pubs.dbo.authors where au_id='172-32-1176'
select au_lname,len(CAST (au_lname as nchar)) from pubs.dbo.authors where au_id='172-32-1176'
select au_lname,len(CAST (au_lname as nvarchar)) from pubs.dbo.authors where au_id='172-32-1176'
 
告诉你一个密秘,你可以用存储过程来求得你要的结果!!
下面给你一个示例代码你看看:
declare @ii int,@jj int,@ff char(30)
declare @cc as char(30)
declare @bb as char(30)//其中@ff、@cc、@bb的长度要等于字段定义的长度(按字节算)
declare @xx int,@yy int
set @xx=(select col_length('bj','dj_code')) //求得给定表的列的定义长度,这里要更改为你的表名和字段名
set @yy=0      //计数变量初始化
declare cs cursor scroll for select dj_code from bj   //声明一个游标变量
open cs     //打开游标变量
fetch first from cs into @ff  //将记录定位在第一个上面

while @@fetch_status = 0 begin  //循环每一行
set @ii=len(@ff) //求当前记录的数据长度(这个长度是按一个汉字一个计算的)
set @bb=rtrim(@ff) + '??????????????????????????????' //这句是为了求出这个记录中去除已有字符,还可再存储多少个byte
//这后面的?的个数等于本字段的长度
set @jj=(select len(@bb))   //由于len是按一个汉字一个计算的,所以这时返回的长度一定是<=字段定义长度
set @ii=@ii+@xx-@jj      //求出本字段的字节长度
if @ii > @yy
set @yy=@ii //找出最大字节长度的长度值

fetch next from cs into @ff
if @@fetch_status=-1 break
end
close cs
deallocate cs

你可以更改这段代码,让它返回最长字段的字节长度,并可以加上输入参数来输入表名和字段名,这样就比较通用了。
 
谢谢各位!问题解决

最简单的办法是datalength()
 
谢谢各位,问题解决,最简单的办法
datalength()!!!
 
接受答案了.
 
使用datalength是返回字节的长度,但是当在字段值后有空格时它也将其长度返回,所以按
你的要求就不对了,因为打印时后尾空格是不应计入的。另外我在sql2000中试验了一下:
使用字符串:你好!hello 它应当字节长度是 10 使用len长度是 8
我将其存入一个长度为30的char字段中,使用datalength(rtrim(字段名)) from 表名 where 唯一条件
得出的长度是 16 而使用上面的存储过程得出的长度是 10,如果直接使用datalength('你好!hello')得出
的结果也是 10 , 不知为什么会得出长度为16。
我将库清空后再插入后结果同上。
 
后退
顶部