在字符串中的回车符SQL查询,并最终移除回车
我有一个表中的一些数据,并有在地的一些回车,我不希望他们。 我想编写一个查询来获取所有包含回车符串。
我想这
select * from Parameters
where Name LIKE '%"\n" %'
也
select * from Parameters
where Name LIKE '\r'
“
两者都是有效的SQL,但没有返回我所期待的。 我是否需要使用像命令或不同的命令? 如何获取回车进入查询?
回车是不一定在任一线路的端部(可以是在中间)。
这将是缓慢的,但如果它是一次性的事情,尝试...
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) || '%'
主要的问题是,除去CR / LF。 使用替代和焦功能,为我工作:
Select replace(replace(Name,char(10),''),char(13),'')
对于Postgres的或Oracle SQL,使用CHR函数:
replace(replace(Name,CHR(10),''),CHR(13),'')
在SQL Server中,我会用:
WHERE CHARINDEX(CHAR(13), name) <> 0 OR CHARINDEX(CHAR(10), name) <> 0
这将搜索这两个回车和换行 。
如果你想搜索的标签也只是补充:
OR CHARINDEX(CHAR(9), name) <> 0
您还可以使用正则表达式:
SELECT * FROM Parameters WHERE Name REGEXP '\n';
这个工程:SELECT * FROM表,其中列LIKE '%(按回车键)%'
忽略括号并按Enter键引进新的生产线。
你可以创建一个函数:
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]
这也适用
SELECT TRANSLATE(STRING_WITH_NL_CR, CHAR(10) || CHAR(13), ' ') FROM DUAL;
像这样的东西似乎为我工作:
SELECT * FROM Parameters WHERE Name LIKE '%\n%'
文章来源: SQL query for a carriage return in a string and ultimately removing carriage return