2016-03-27 2 views
0

^の文字をテーブルの選択した行から削除するにはどうすればよいですか?SQLの次の文字/文字を削除する^

TABLE Things 
Boat 
Do^2gs 
Cat^fs 
^KBear 
Mi^&ce 
D^Rice 

結果:

Boat 
Dogs 
Cats 
Bear 
Mice 
Dice 
+0

**のMicrosoft SQL Serverでこの機能を使用することができます!= MySQLを** – lad2025

+1

うん、私は、MySQLとMSSQLの両方に使用されます。 –

答えて

1
select case when charindex('^', col) <> 0 
     then stuff(col, charindex('^', col), 2, '') 
     else col 
     end 

-- to handle multiple^up to max of 4 

select t.col, 
     r4.col 
from Things t 
    cross apply 
    (
     select col = case when charindex('^', col) <> 0 
      then stuff(col, charindex('^', col), 2, '') 
      else col 
      end 
    ) r1 
    cross apply 
    (
     select col = case when charindex('^', r1.col) <> 0 
      then stuff(r1.col, charindex('^', r1.col), 2, '') 
      else r1.col 
      end 
    ) r2 
    cross apply 
    (
     select col = case when charindex('^', r2.col) <> 0 
      then stuff(r2.col, charindex('^', r2.col), 2, '') 
      else r2.col 
      end 
    ) r3 
    cross apply 
    (
     select col = case when charindex('^', r3.col) <> 0 
      then stuff(r3.col, charindex('^', r3.col), 2, '') 
      else r3.col 
      end 
    ) r4 

-- UDF to remove the^
create function remove_chr 
(
    @str varchar(100) 
) 
returns varchar(100) 
as 
begin 
    while charindex('^', @str) <> 0 
    begin 
     select @str = case  
       when charindex('^', @str) <> 0 
       then stuff(@str, charindex('^', @str), 2, '') 
       else @str 
       end 
    end 
    return @str 
end 
+0

使用したクエリを投稿できますか? – Squirrel

+0

nvmリス、それは動作します..申し訳ありません、私は以前のコメントを削除しました.....はい、それは動作しますが、それは最初の^で動作しますが、2番目と他の、しかし、別の解決策がある場合は、親切に投稿を編集してください。私は見るのが大好きです。 –

+0

あなたは複数の文字列で作業する必要がありますか? – Squirrel

0

あなたがMySQLを使用している場合は使用できます。

SELECT col, 
     IF(INSTR(col,'^') > 0,CONCAT(LEFT(col,INSTR(col, '^')-1), 
      RIGHT(col,LENGTH(col) - INSTR(col, '^')-1)), col) AS result 
FROM Things; 

SqlFiddleDemo

そしてSQL Server同等:

SELECT col, 
     IIF(CHARINDEX('^',col) > 0,CONCAT(LEFT(col,CHARINDEX('^',col)-1), 
       RIGHT(col,LEN(col) - CHARINDEX('^',col)-1)), col) AS result 
FROM Things 

LiveDemo


SQL Server 2008

SELECT col, 
    CASE WHEN CHARINDEX('^',col) > 0 
    THEN LEFT(col,CHARINDEX('^',col)-1) + RIGHT(col,LEN(col) - CHARINDEX('^',col)-1) 
    ELSE col 
    END AS result 
FROM Things; 

それは、nがある場合にのみ動作することに注意してください1つまたは複数の発生が^である。

+1

ありがとうございます。私はそれを愛し、それはすべてそこにあります、MySQLは、SQLとSQL2008 –

+0

@ JeffersonInoc素晴らしい。あなたの質問が解決された場合、[私の答えを受け入れる](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)を忘れないでください:) – lad2025

0

ここでは、「^」の発生を何回も取り除くソリューションです。 ループやカーソルを使用していない関数SQLサーバーを作成しました。

CREATE FUNCTION [dbo].[FnReplaceChar](@pOriginalText VARCHAR(2000)) 
RETURNS VARCHAR(1000) 
AS 
BEGIN 
     DECLARE @vText VARCHAR(1000) 
       ,@vXML XML 

     --Convert text as XML format 
     SELECT @vXML = '<Root><dtl><f>' + REPLACE(@pOriginalText,'^','</f></dtl><dtl><f>^')+'</f></dtl></Root>' 

     --Splits words started with '^' and combines after removing character starts with '^' 
     SET @vText = (
         SELECT '' + ACT_TEXT 
         FROM 
         (
         SELECT CASE WHEN CHARINDEX('^',DOC.COL.value('f[1]','VARCHAR(100)') ,0) > 0 
             THEN STUFF(DOC.COL.value('f[1]','VARCHAR(100)'),CHARINDEX('^',DOC.COL.value('f[1]','VARCHAR(100)') ,0),2,'') 
             ELSE DOC.COL.value('f[1]','VARCHAR(100)') 
           END AS ACT_TEXT 
         FROM @vXML.nodes('/Root/dtl') DOC(COL) 
         )T 
         FOR XML PATH('') 
        ) 

     RETURN @vText 
END 

あなたはあなたの選択クエリ

SELECT dbo.[FnReplaceChar](col_Name) 
FROM [Things] 
関連する問題