我想找出所有的中文字为1个或2个的字段,用什么函数我用
select * from dbo.t1
where len(t1.名字)=1 or len(t1.名字)=2
时会输出英文和数字,而我不想要这些(数字,英文),怎么解决

解决方案 »

  1.   


    select * from 
    (
    select * from dbo.t1 where patindex('%[吖-咗]%',名字) > 0
    )t
    where len(t.名字)=1 or len(t.名字)=2
      

  2.   


    --自定义函数--提取中文
    IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL
    DROP FUNCTION DBO.CHINA_STR
    GO
    CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))
    RETURNS VARCHAR(100)
    AS
    BEGIN
    WHILE PATINDEX('%[^吖-座]%',@S) > 0
    SET @S = STUFF(@S,PATINDEX('%[^吖-座]%',@S),1,N'')
    RETURN @S
    END
    GOselect  len(DBO.CHINA_STR('呵呵ABC123'))
      

  3.   

    create table tb 
    (
    aa varchar(10)
    )
    insert into tb values('aa')
    insert into tb values('11')
    insert into tb values('中国字')
    insert into tb values('小孩之')
    insert into tb values('你好')
    insert into tb values('我')
    select * from 
    (
    select * from tb where patindex('%[吖-咗]%',aa) > 0
    ) t
    where len(aa) = 1 or len(aa) = 2
    /*
    aa
    你好
    我(2 行受影响)实例
      

  4.   


    create table tb1 
    (
        名字    varchar(10)
    )
    insert into tb1 values('aa')
    insert into tb1 values('11')
    insert into tb1 values('中国字')
    insert into tb1 values('小孩之')
    insert into tb1 values('你好')
    insert into tb1 values('我')select * from tb1
    where (len(名字)=1 and datalength(名字)=2) or (len(名字)=2 and datalength(名字)=4)drop table tb1/*
    名字
    ----------
    你好
    我(2 行受影响)
      

  5.   

    --提取数字
    IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL
    DROP FUNCTION DBO.GET_NUMBER2
    GO
    CREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))
    RETURNS VARCHAR(100)
    AS
    BEGIN
    WHILE PATINDEX('%[^0-9]%',@S) > 0
    BEGIN
    set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
    END
    RETURN @S
    END
    GO
    --测试
    PRINT DBO.GET_NUMBER('呵呵ABC123ABC')
    GO
    --123
    --------------------------------------------------------------------
    --提取英文
    IF OBJECT_ID('DBO.GET_STR') IS NOT NULL
    DROP FUNCTION DBO.GET_STR
    GO
    CREATE FUNCTION DBO.GET_STR(@S VARCHAR(100))
    RETURNS VARCHAR(100)
    AS
    BEGIN
    WHILE PATINDEX('%[^a-z]%',@S) > 0
    BEGIN
    set @s=stuff(@s,patindex('%[^a-z]%',@s),1,'')
    END
    RETURN @S
    END
    GO
    --测试
    PRINT DBO.GET_STR('呵呵ABC123ABC')
    GO
    --------------------------------------------------------------------
    --提取中文
    IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL
    DROP FUNCTION DBO.CHINA_STR
    GO
    CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))
    RETURNS VARCHAR(100)
    AS
    BEGIN
    WHILE PATINDEX('%[^吖-座]%',@S) > 0
    SET @S = STUFF(@S,PATINDEX('%[^吖-座]%',@S),1,N'')
    RETURN @S
    END
    GO
    PRINT DBO.CHINA_STR('呵呵ABC123ABC')
    GO
    --------------------------------------------------------------------