如题.。   
  小弟请教大侠们: 如何截取表中某字段(该字段包含英文、数字、汉字等等),现在想做的就是将这字段中汉字前面的数据截取出来添加到另外一个字段里面去.。 
  请使用SQL SERVER 数据库.。 小弟先谢谢了.。  很急。   麻烦大家了.。  不会的帮忙顶一下.。  

解决方案 »

  1.   

    --取数字
    CREATE function dbo.F_Get_No
    (
     @No varchar(100)

    RETURNS INT 
    AS 
    BEGIN 
     WHILE PATINDEX('%[^0-9]%',@No)>0 
     BEGIN 
      SET @No=STUFF(@No,PATINDEX('%[^0-9]%',@No),1,'') 
     END 
     RETURN CONVERT(INT,@No) 
    END 一个函数解决问题。
      

  2.   

    --提取数字
    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
      

  3.   

    create table tb(area varchar(20))
    insert into tb values('100平方米') 
    insert into tb values('120平方米') 
    insert into tb values('70-80平方米') 
    go
    --建立如下函数
    go
    create function getnewstr(@oldstr varchar(100)) returns varchar(100)
    as
      begin
        declare @i int
        set @i = 1
        while @i <= len(@oldstr)
        if substring(@oldstr, @i, 1) like('[^吖-咗]')
           set @oldstr = replace(@oldstr, substring(@oldstr, @i, 1), '')
        else
           set @i = @i +1
        return @oldstr
    end
    goselect area = dbo.getnewstr(area) from tb where area like('%[^吖-咗]%')
    /*
    area                                                                                                 
    -------------------------------------
    平方米
    平方米
    平方米(所影响的行数为 3 行)
    */drop table tb
    drop function dbo.getnewstr
      

  4.   


    比如有下表:
    id      content         strContent
    1       12asd@1a啊哦1     12asd@1a
    2       asd2,21嘿嘿a      asd2,21
    3       asd21a..哇哦a2     asd21a..懂了?    就是把content字段里的汉字前面的数据截取出来添加到strContent字段里去
      

  5.   

    use test
    go
    if object_id('test.dbo.tb') is not null drop table tb
    -- 创建数据表
    create table tb
    (
    id int,
    content nvarchar(20),
    strContent nvarchar(20)
    )
    go
    --插入测试数据
    insert into tb select 1,N'12asd@1a啊哦1',null
    union all select 2,N'asd2,21嘿嘿a',null
    union all select 3,N'asd21a..哇哦a2',null
    go
    --代码实现update tb set strContent=substring([content],1,PATINDEX('%[吖-座]%',[content])-1)select * from tb/*测试结果id content strContent
    ----------------------------------
    1 12asd@1a啊哦1 12asd@1a
    2 asd2,21嘿嘿a asd2,21
    3 asd21a..哇哦a2 asd21a..(3 行受影响)
    */
      

  6.   

    if object_id('tb') is not null  
    drop table tb
    create table tb(name varchar(100) ,address varchar(50))
    insert into tb
    select '23489很好xyz','北京' union all
    select '323455最好rmz','上海'
    --查询表
    select * from tb
    --添加数字
    select left([name],(patindex('%[很-最]%',[name])-1))as'col' from tb
    insert into  tb (address)  select  left([name],(patindex('%[很-最]%',[name])-1)) from 
      

  7.   

    --测试数据
    if object_id('tb') is not null  
    drop table tb
    create table tb(name varchar(100) ,address varchar(50))
    insert into tb
    select '23489很好xyz','北京' union all
    select '323455最好rmz','上海'
    --查询表
    select * from tb
    --添加数字
    select left([name],(patindex('%[很-最]%',[name])-1))as'col' from tb
    insert into  tb (address)  select  left([name],(patindex('%[很-最]%',[name])-1)) from tb
      

  8.   

    非常感谢喜喜大哥! 代码还有一点点问题,就是当字段里面没有汉字的时候就会出错,所以我加了case when的判断...  已经OK了
    弱弱的问一下,['%吖-坐%']表达式里面的吖和坐是随便什么字吧? 只要是a和z打出来的字吧?还有,,非常感谢楼上的各位大哥的帮助.。 结账咯