^
の文字をテーブルの選択した行から削除するにはどうすればよいですか?SQLの次の文字/文字を削除する^
TABLE Things
Boat
Do^2gs
Cat^fs
^KBear
Mi^&ce
D^Rice
結果:
Boat
Dogs
Cats
Bear
Mice
Dice
^
の文字をテーブルの選択した行から削除するにはどうすればよいですか?SQLの次の文字/文字を削除する^
TABLE Things
Boat
Do^2gs
Cat^fs
^KBear
Mi^&ce
D^Rice
結果:
Boat
Dogs
Cats
Bear
Mice
Dice
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
あなたが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;
そして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
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つまたは複数の発生が^
である。
ありがとうございます。私はそれを愛し、それはすべてそこにあります、MySQLは、SQLとSQL2008 –
@ JeffersonInoc素晴らしい。あなたの質問が解決された場合、[私の答えを受け入れる](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)を忘れないでください:) – lad2025
ここでは、「^」の発生を何回も取り除くソリューションです。 ループやカーソルを使用していない関数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]
**のMicrosoft SQL Serverでこの機能を使用することができます!= MySQLを** – lad2025
うん、私は、MySQLとMSSQLの両方に使用されます。 –