web-dev-qa-db-ja.com

文字列のキャリッジリターンのSQLクエリと最終的にキャリッジリターンを削除

文字列のキャリッジリターンのSQLクエリと最終的にキャリッジリターンを削除

テーブルにいくつかのデータがあり、必要のない場所にはキャリッジリターンがあります。キャリッジリターンを含むすべての文字列を取得するクエリを作成しようとしています。

私はこれを試しました

select * from Parameters
where Name LIKE '%"\n" %'

また

select * from Parameters
where Name LIKE '\r'

'

どちらも有効なSQLですが、探しているものを返していません。 Likeコマンドまたは別のコマンドを使用する必要がありますか?クエリにキャリッジリターンを取得するにはどうすればよいですか?

キャリッジリターンは、必ずしも行の終わりにあるわけではありません(中央にある場合もあります)。

48
Maestro1024

これは遅くなりますが、一度だけの場合は試してみてください...

select * from parameters where name like '%'+char(13)+'%' or name like '%'+char(10)+'%'

ANSI SQL文字列連結演算子は「||」であるため、次のようにする必要があります。

select * from parameters where name like '%' || char(13) || '%' or name like '%' || char(10) || '%'
65
KM.

主な質問は、CR/LFを削除することでした。 replace関数とchar関数を使用するとうまくいきます:

Select replace(replace(Name,char(10),''),char(13),'')

PostgresまたはOracle SQLの場合、代わりにCHR関数を使用します。

       replace(replace(Name,CHR(10),''),CHR(13),'')
59
Grant Dever

SQL Serverでは、次を使用します。

WHERE CHARINDEX(CHAR(13), name) <> 0 OR CHARINDEX(CHAR(10), name) <> 0

これは、キャリッジリターン改行の両方を検索します。

tabsを検索したい場合は、追加するだけです:

OR CHARINDEX(CHAR(9), name) <> 0
9
HLGEM

正規表現も使用できます。

SELECT * FROM Parameters WHERE Name REGEXP '\n';
3
JYelton

これは機能します: '%(hit enter)%'などの列があるテーブルから*を選択します

大括弧を無視し、Enterを押して新しい行を導入します。

2
Logan

関数を作成できます:

CREATE FUNCTION dbo.[Check_existance_of_carriage_return_line_feed]
(
      @String VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
BEGIN
DECLARE @RETURN_BOOLEAN INT

;WITH N1 (n) AS (SELECT 1 UNION ALL SELECT 1),
N2 (n) AS (SELECT 1 FROM N1 AS X, N1 AS Y),
N3 (n) AS (SELECT 1 FROM N2 AS X, N2 AS Y),
N4 (n) AS (SELECT ROW_NUMBER() OVER(ORDER BY X.n)
FROM N3 AS X, N3 AS Y)

SELECT @RETURN_BOOLEAN =COUNT(*)
FROM N4 Nums
WHERE Nums.n<=LEN(@String) AND ASCII(SUBSTRING(@String,Nums.n,1)) 
IN (13,10)    

RETURN (CASE WHEN @RETURN_BOOLEAN >0 THEN 'TRUE' ELSE 'FALSE' END)
END
GO

次に、次のようなクエリを簡単に実行できます。

SELECT column_name, dbo.[Check_existance_of_carriage_return_line_feed] (column_name)
AS [Boolean]
FROM [table_name]
1
Amit Tikoo

これも機能します

SELECT TRANSLATE(STRING_WITH_NL_CR, CHAR(10) || CHAR(13), '  ') FROM DUAL;
0
user2394206

最初のクエリから二重引用符を省略します。

... LIKE '%\n%' 
0
Byron Whitlock

このような何かが私のために働くようです:

SELECT * FROM Parameters WHERE Name LIKE '%\n%'
0
djc