----------- ----------- 2 4和 readtext 可以相对应.select len(content)-1 len from report where id=39 是不行的.
就是要起到 下面这种功能 LEN 返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。
返回给定字符串表达式的字符 用LEN rtrim(),ltrim(),去掉左右空格 你试试 CREATE PROCEDURE report_read @report_id int,@begin int,@end1 int AS DECLARE @ptrval varbinary(16),@len int,@end int SELECT @ptrval = TEXTPTR(content),@len = len(content)-1 from report where id=@report_id if (@len>@end1) set @end=@end1 else set @end=@len READTEXT report.content @ptrval @begin @end select @len go
存储过程中可以, 为什么 下面的通不过 select len(content)-1 len1 from report where id=20还有用你的方法, 在程序中我得不到 @len 的值
To newmcz len 在存储过程中也可以,
我的要求的结果是这样的: 我用 readtext 读取 text 字段, 因为字段太长,我需要分页显示:1 因 READTEXT report.content @ptrval @begin @end 读出来是字符数, 那么必须得到 text 字段总共有多少字符数? 以便分页显示,2 我如何在 程序中 得到返回 值 READTEXT report.content @ptrval @begin @end ,它在程序中直接输出3 下面是我自己写的一个仿 len() 函数, 大家谁帮改一下, 在 sql 中我不知用哪个函数 CREATE PROCEDURE report_len @report_id int AS DECLARE @ptrval varbinary(16),@len int,@ch varchar(10) SELECT @ptrval = TEXTPTR(content),@len = len(content) from report where id=@report_id while (@a < @len) { @ch = READTEXT report.content @ptrval @a 1 @ch2 = READTEXT report.content @ptrval @a+1 1 if (ord(@ch) >= HexDec("0x81") && ord(@ch2) >= HexDec("0x40")) { set @a += 2; } else { set @a++; } select @len go谢谢大家了
/* table name: test_text_row2; text field name : pdata; */ declare @pdata varbinary(16) , @lendata numeric(19,0) select @lendata = datalength(pdata)/2 --pdata为ntext时除2,为text时不需要除2 ,@pdata=textptr(pdata) from test_text_row2 print (@lendata) declare @begin int ,@len int select @begin = 0 ,@len = 4000 while @begin < @lendata begin if @lendata-@begin>4000 set @len = 4000 else set @len = @lendata-@begin readtext test_text_row2.pdata @pdata @begin @len set @begin = @begin+4000 end ----- f分页数据datalength(pdata)/4000,4000可以为为你的分页显示字符数量,但不能大于4000(ntext)或8000(text,image) ------------------------- 我也在程序中用到这些东西,不知道对你是否有帮助;
读取 text、ntext 或 image 列中的 text、ntext 或 image 值,从指定的偏移量开始读取指定的字节数。下例在 pubs 数据库的 pub_info 表中查找与 pub_id 0736 相关联的 text 列 (pr_info)。下例首先声明一个局部变量 @val。然后将文本指针(长二进制字符串)置于 @val 中,并将其作为参数提供给 READTEXT 语句,该语句将返回从第五个字节(偏移量为 4)开始的 10 个字节。USE pubs
GO
DECLARE @val varbinary(16)
SELECT @val = TEXTPTR(pr_info)
FROM pub_info
WHERE pub_id = '0736'
READTEXT pub_info.pr_info @val 4 10
GO
@end:代表要返回的长度
select len('中国'),datalength('中国')
----------- -----------
2 4和 readtext 可以相对应.select len(content)-1 len from report where id=39 是不行的.
LEN
返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。
rtrim(),ltrim(),去掉左右空格
你试试
CREATE PROCEDURE report_read @report_id int,@begin int,@end1 int
AS
DECLARE @ptrval varbinary(16),@len int,@end int
SELECT @ptrval = TEXTPTR(content),@len = len(content)-1 from report where id=@report_id
if (@len>@end1)
set @end=@end1
else
set @end=@len
READTEXT report.content @ptrval @begin @end
select @len
go
为什么 下面的通不过
select len(content)-1 len1 from report where id=20还有用你的方法, 在程序中我得不到 @len 的值
len 在存储过程中也可以,
我用 readtext 读取 text 字段, 因为字段太长,我需要分页显示:1 因 READTEXT report.content @ptrval @begin @end 读出来是字符数, 那么必须得到 text 字段总共有多少字符数? 以便分页显示,2 我如何在 程序中 得到返回 值 READTEXT report.content @ptrval @begin @end ,它在程序中直接输出3 下面是我自己写的一个仿 len() 函数, 大家谁帮改一下, 在 sql 中我不知用哪个函数
CREATE PROCEDURE report_len @report_id int
AS
DECLARE @ptrval varbinary(16),@len int,@ch varchar(10)
SELECT @ptrval = TEXTPTR(content),@len = len(content) from report where id=@report_id
while (@a < @len) {
@ch = READTEXT report.content @ptrval @a 1
@ch2 = READTEXT report.content @ptrval @a+1 1
if (ord(@ch) >= HexDec("0x81") && ord(@ch2) >= HexDec("0x40")) {
set @a += 2;
}
else {
set @a++;
}
select @len
go谢谢大家了
table name: test_text_row2;
text field name : pdata;
*/
declare @pdata varbinary(16) , @lendata numeric(19,0)
select @lendata = datalength(pdata)/2 --pdata为ntext时除2,为text时不需要除2
,@pdata=textptr(pdata) from test_text_row2
print (@lendata)
declare @begin int ,@len int
select @begin = 0 ,@len = 4000
while @begin < @lendata
begin
if @lendata-@begin>4000
set @len = 4000
else
set @len = @lendata-@begin
readtext test_text_row2.pdata @pdata @begin @len
set @begin = @begin+4000
end
-----
f分页数据datalength(pdata)/4000,4000可以为为你的分页显示字符数量,但不能大于4000(ntext)或8000(text,image)
-------------------------
我也在程序中用到这些东西,不知道对你是否有帮助;