我正在尝试重新格式化SQL Server 2012(SSMS v11.0.2100.60)中以自由格式文本提交的数据列的格式。它以带有CR / LF和制表符的标准段落格式格式化。问题在于数据是从HTML转换的,并且在重新格式化为文本后,数据中还有许多额外的CR / LF和选项卡,我正在尝试清理它们。
数据作为@vOut (varchar(max))
传递到我的函数中。下面的代码将处于while循环中,直到找到匹配项。
DECLARE @vFind VARCHAR(MAX);
DECLARE @vFix VARCHAR(MAX);
SET @VFind = CONCAT(CHAR(13),CHAR(09),CHAR(13));
SET @VFix = CONCAT(CHAR(13),CHAR(13));
IF CHARINDEX(@VFind, @vOut) > 0
BEGIN
SET @vOut = REPLACE(@vOut, @VFind, @VFix );
END
---------------
SET @VFind = CONCAT(CHAR(13),CHAR(13),CHAR(13));
SET @VFix = CONCAT(CHAR(13),CHAR(13));
IF CHARINDEX(@vOut, @VFind) > 0
BEGIN
SET @vOut = REPLACE(@vOut, @VFind, @VFix );
END
结果集应将CHAR(13)+ CHAR(13)+ CHAR(13)替换为CHAR(13)+ CHAR(13),以保留基于段落的格式。
以上两个项目的charindex确实返回> 0的值,但是替换不起作用,因此返回的数据相同。
答案 0 :(得分:0)
正如Larnu在评论中所写,您可能拥有CRLF-而不是CR-s。尝试使用这些行:
SET @VFind = CONCAT(CHAR(13),CHAR(10),CHAR(13),CHAR(10),CHAR(13),CHAR(10));
SET @VFix = CONCAT(CHAR(13),CHAR(10),CHAR(13),CHAR(10));
您也可能只有LF-s(如果文件来自Unix / Mac计算机),因此也请尝试以下操作:
SET @VFind = CONCAT(CHAR(10),CHAR(10),CHAR(10));
SET @VFix = CONCAT(CHAR(10),CHAR(10));
答案 1 :(得分:0)
是您要找的东西吗?
DECLARE @vOut VARCHAR(MAX)=
's
K';
SELECT REPLACE( REPLACE(
REPLACE(
REPLACE(@vOut,CHAR(13)+CHAR(10),'<>')
,'><','')
,'<>','<><>')
,'<>',CHAR(13))
答案 2 :(得分:0)
所以,我不确定它有什么区别,但是我更改了CONCAT方法,似乎有所不同。
SET @VFind = CONCAT(CHAR(13),CHAR(09),CHAR(13));
SET @VFix = CONCAT(CHAR(13),CHAR(13));
and
SET @VFind = CONCAT(CHAR(13),CHAR(13),CHAR(13));
SET @VFix = CONCAT(CHAR(13),CHAR(13));
to
SET @VFind = CHAR(13)+CHAR(09)+CHAR(13);
SET @VFix = CHAR(13)+CHAR(13);
and
SET @VFind = CHAR(13)+CHAR(13)+CHAR(13);
SET @VFix = CHAR(13)+CHAR(13);