字符串中回车符的SQL查询,最终删除回车符
我在表格中有一些数据,并且在我不想要它们的地方有一些回车。我正在尝试编写一个查询来获取包含回车符的所有字符串。
我试过这个
select * from Parameters
where Name LIKE '%"\n" %'
另外
select * from Parameters
where Name LIKE '\r'
两者都是有效的SQL,但没有返回我要查找的内容。我是否需要使用 Like 命令或其他命令?如何让回车进入查询?
回车不一定在线的末端(可能在中间)。
答案 0 :(得分:65)
这会很慢,但如果是一次性的话,试试......
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) || '%'
答案 1 :(得分:58)
主要问题是删除CR / LF。使用replace和char函数对我有用:
Select replace(replace(Name,char(10),''),char(13),'')
对于Postgres或Oracle SQL,请改用CHR函数:
replace(replace(Name,CHR(10),''),CHR(13),'')
答案 2 :(得分:9)
在SQL Server中我会使用:
WHERE CHARINDEX(CHAR(13), name) <> 0 OR CHARINDEX(CHAR(10), name) <> 0
这将搜索回车和换行。
如果您想搜索标签,只需添加:
OR CHARINDEX(CHAR(9), name) <> 0
答案 3 :(得分:3)
您还可以使用正则表达式:
SELECT * FROM Parameters WHERE Name REGEXP '\n';
答案 4 :(得分:2)
这有效: 从表中选择*,其中列'%(命中输入)%'
忽略括号并按Enter键以引入新行。
答案 5 :(得分:1)
您可以创建一个功能:
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]
答案 6 :(得分:0)
忽略第一个查询中的双引号。
... LIKE '%\n%'
答案 7 :(得分:0)
这样的事似乎对我有用:
SELECT * FROM Parameters WHERE Name LIKE '%\n%'
答案 8 :(得分:0)
这也有效
SELECT TRANSLATE(STRING_WITH_NL_CR, CHAR(10) || CHAR(13), ' ') FROM DUAL;
答案 9 :(得分:0)
如果您正在考虑创建函数,请尝试以下操作: 宣布 @schema sysname ='dbo' ,@tablename sysname ='mvtEST' ,@cmd NVarchar(2000) ,@ColName sysname
DECLARE @NewLine Table
(ColumnName Varchar(100)
,Location Int
,ColumnValue Varchar(8000)
)
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = @tablename AND DATA_TYPE LIKE '%CHAR%'
DECLARE looper CURSOR FAST_FORWARD for
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = @tablename AND DATA_TYPE LIKE '%CHAR%'
OPEN looper
FETCH NEXT FROM looper INTO @ColName
WHILE @@fetch_status = 0
BEGIN
SELECT @cmd = 'select ''' +@ColName+ ''', CHARINDEX(Char(10), '+ @ColName +') , '+ @ColName + ' from '+@schema + '.'+@tablename +' where CHARINDEX(Char(10), '+ @ColName +' ) > 0 or CHARINDEX(CHAR(13), '+@ColName +') > 0'
PRINT @cmd
INSERT @NewLine ( ColumnName, Location, ColumnValue )
EXEC sp_executesql @cmd
FETCH NEXT FROM looper INTO @ColName
end
CLOSE looper
DEALLOCATE looper
SELECT * FROM @NewLine