select len('中国'),datalength('中国')
                        
----------- ----------- 
2           4(所影响的行数为 1 行)

解决方案 »

  1.   

    READTEXT
    读取 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
      

  2.   

    @begin:代表起始位置
    @end:代表要返回的长度
      

  3.   

    那再问一下,取  字符串长度,如何取 ,
    select len('中国'),datalength('中国')
                            
    ----------- ----------- 
    2           4和 readtext 可以相对应.select len(content)-1 len  from report where id=39 是不行的.
      

  4.   

    就是要起到 下面这种功能
    LEN
    返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。
      

  5.   

    返回给定字符串表达式的字符 用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
      

  6.   

    存储过程中可以,
    为什么 下面的通不过
    select len(content)-1 len1  from report where id=20还有用你的方法, 在程序中我得不到 @len 的值
      

  7.   

    To newmcz
    len 在存储过程中也可以,
      

  8.   

    我的要求的结果是这样的:
    我用 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谢谢大家了
      

  9.   

    /*
    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)
    -------------------------
    我也在程序中用到这些东西,不知道对你是否有帮助;