我有一表,旗下有个字段Keywords为nvarchar型
内容为 |中搜|开发渠道|智能手机|
我如何通过查询仅提取 中搜 不要那个"|" 也不要后面的了.另外还有一个表Keyword 有一个ntext类型14,833,555,666,777
如何提取 14 833 555 666 777,不要逗号.谢谢老师们.

解决方案 »

  1.   

    1.DECLARE @a nvarchar(100)
      set @a = N'¦中搜 ¦开发渠道 ¦智能手机 ¦'
      select substring(reverse(SUBSTRING(reverse(@a),charINDEX('¦',@a ),LEN(@a)-charINDEX('¦',@a))),1,charindex('¦',reverse(SUBSTRING(reverse(@a),charINDEX('¦',@a ),LEN(@a)-charINDEX('¦',@a))))-1)
    2.select replace(14,833,555,666,777,',','')
    2不知道对不对,你测一下,1测过了
      

  2.   

    用 charindex 和 substring  和 len 搞啊!
      

  3.   

    declare @s varchar(100)
    set @s='¦ 中搜  ¦开发渠道 ¦智能手机 ¦'select substring(@s,charindex('¦',@s)+1,charindex('¦',@s,charindex('¦',@s)+1)-charindex('¦',@s)-1)
      

  4.   

    补充下,1的问题是 |xxx|xxx|xxx|两个||之间的内容是不固定的.而且可能只有一个|XXX|可能有5个|XXX|
      

  5.   

    create table ta( col varchar(100))
    insert ta select
    '¦中搜 ¦开发渠道 ¦智能手机 ¦' 
    go--加一个分隔函数:
    create  function F_split(
                    @s varchar(8000),          --包含多个数据项的字符串
                    @pos int,                 --要获取的数据项的位置
                    @split varchar(10)        --数据分隔符
    )RETURNS varchar(100)
    AS
    BEGIN
        IF @s IS NULL RETURN(NULL)
        DECLARE @splitlen int                --分隔符长度
        SELECT @splitlen=LEN(@split+'a')-2
        WHILE @pos>1 AND charindex(@split,@s+@split)>0
            SELECT @pos=@pos-1,
                @s=stuff(@s,1,charindex(@split,@s+@split)+@splitlen,'')
        RETURN(nullif(left(@s,charindex(@split,@s+@split)-1),''))
    END
    GOselect dbo.F_split(col,2,'|')
    from tadrop table ta
    drop function F_split
    /*
    ---------------------------------------------------------------------------------------------------- 
    中搜 (所影响的行数为 1 行)
    */
      

  6.   

    DECLARE @s NVARCHAR(100)
    SET @s=N'¦中搜 ¦开发渠道 ¦智能手机'
    SELECT STUFF(RIGHT(@s,LEN(@s)-1),CHARINDEX(N'¦',RIGHT(@s,LEN(@s)-1)),1000000,'')CREATE TABLE t(t NTEXT)
    GO
    INSERT t SELECT N'123,121,213'GO
    SELECT REPLACE(CAST(t AS VARCHAR(8000)),',',' ') FROM t
    GO
    DROP TABLE t
    GO