我有一個客戶表PCUST,編號CT_NO結構為 nvarchar(20),由於在界面上有用一個文本框來輸入內容,且設置文本框的屬性MAXLENGTH=20,所以資料庫存入有以下內容:
CT_NO
----------
1234567890
我是客戶A002
TEST002
MAXNAMEA004這是一個P
-------------------
但後來由於版本升級原因,將該欄位結構修改為 nvarchar(10),現在我的問題是如何在SQL中用SQL語句查出內容長度大於10碼的記錄,正確應返回這兩條:
--------------------
我是客戶A002           -->這條內容長度現在為12
MAXNAMEA004這是一個P   -->這條內容長度現在為20
-----------------
LEN()和DATALENGTH()都不對喲,望高手指點,萬分感激!!

解决方案 »

  1.   

    http://blog.csdn.net/wan4u/archive/2009/03/21/4010589.aspx
      

  2.   


    declare @A table(CT_NO varchar(20))
    insert into @A values('1234567890')
    insert into @A values('我是客戶A002')
    insert into @A values('TEST002')
    insert into @A values('MAXNAMEA004這是一個P')select CT_NO,len(CT_NO) from @A-- where len(CT_NO)=11--返回
    1234567890 10
    我是客戶A002 8
    TEST002         7
    MAXNAMEA004這是一個P 16
      

  3.   

    用LENB()吧,不知道是否想要这个结果
    debug.print LENB("我是客戶A002")   '是16
      

  4.   

    SQL里面有些函数是支持的,有些不支持,没找到这方面的资料,郁闷
      

  5.   

    mssql数据库的话,看来要在数据库中自己写函数或者存储过程...
      

  6.   


    USE TESTGO
    CREATE FUNCTION StringLen(@Str varchar(20))
    RETURNS int
    AS
    BEGIN
        DECLARE @StringLen int
        DECLARE @Len int
        SET @StringLen=0
        SET @Len=LEN(@Str)
        WHILE @Len>0
        BEGIN
            SET @StringLen=@StringLen+1
            SET @StringLen=@StringLen+PATINDEX('%[吖-咗]%',SUBSTRING(@Str,@Len,1))
            SET @Len=@Len-1
        END
        RETURN(@StringLen)
    ENDGO
    CREATE TABLE customer(
        cname varchar(20)
    )
    GO
    INSERT INTO customer VALUES('1234567890')
    INSERT INTO customer VALUES('我是客戶A002')
    INSERT INTO customer VALUES('TEST002')
    INSERT INTO customer VALUES('MAXNAMEA004這是一個P')
    INSERT INTO customer VALUES('江苏省南京市')
    INSERT INTO customer VALUES('TE中国南京')
    INSERT INTO customer VALUES('TE1中国南京')
    INSERT INTO customer VALUES('中国南京市')GO
    SELECT cname FROM customer WHERE dbo.StringLen(cname)>10GO
    DROP TABLE customer
    DROP FUNCTION StringLenGO
      

  7.   

    Len 统计字符数,无论中文还是英文,Unicode 的字符数都为 1。
    DataLength 统计字节数,Unicode 字符的字节数都为 2。转换成 varchar 再计算
    Len(Convert(varchar(20),CT_NO))

    DataLength(Convert(varchar(20),CT_NO))
      

  8.   

    看來在SQL語句是沒有什麼函數來達到我的要求了,現在我只有改用記錄集循環在VB中判斷了
      

  9.   

    明明转化成 varchar 后用 DataLength 是可以的!
    CREATE TABLE T(CT_NO nvarchar(20))
    GOINSERT INTO T VALUES(N'1234567890')
    INSERT INTO T VALUES(N'我是客戶A002')
    INSERT INTO T VALUES(N'TEST002')
    INSERT INTO T VALUES(N'MAXNAMEA004這是一個P')
    GOSELECT CT_NO,
           Len(CT_NO),DataLength(CT_NO),
           Len(Convert(varchar(20),CT_NO)),
           DataLength(Convert(varchar(20),CT_NO))
      FROM T
    --执行结果
    1234567890              10      20      10      10
    我是客戶A002             8      16       8      12
    TEST002                  7      14       7       7
    MAXNAMEA004這是一個P    16      32      16      20