sqlite查询用合法的回车替换隐藏/不可见的回车

时间:2013-10-25 02:53:54

标签: sql sqlite

我有一个包含数千个文本条目的sqlite数据库。该文本有许多不可见/隐藏的回车符,它在一个长行中显示文本。它在某些程序上显示正常,而在其他程序上它不喜欢这样。如果我只是删除这些隐藏的回车并通过点击“输入”按钮替换它们,一切正常。我的问题是如何用正常的回车替换这些隐藏的字符(我认为是CHAR(13)或CHAR(10)),就像我按下回车键。正确的SQLite查询是什么?我已经找到了一些关于用空格替换它们的例子,但没有关于用普通段落替换它们。

这是我的意思的一个例子:

- 来自英格兰羊毛生产增长的结果 - 围栏是以前农场的土地,它们变成了羊牧场 - 曾经在以前的农田上工作的农奴被驱逐

这是我希望它显示的内容:

  • 英格兰羊毛产量增长的结果
  • 围栏是以前农场的土地,它们变成了绵羊的牧场
  • 曾经在以前农场工作的农奴被驱逐

我可以通过删除这些隐藏的回车并按下回车按钮来完成此操作。我可以为整个数据库执行此操作,但这需要我大约3个月的时间。

任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:3)

“正常”换行取决于应用。实际上,不同的操作系统使用不同的换行符。

首先,我会确保在您的数据库中规范化所有换行符 - 我更喜欢单个LFx'0A'),因此我会确保我的数据仅使用此字符:

 UPDATE mytable SET mycol=REPLACE(REPLACE(mycol, x'0D0A', x'0A'), x'0D', x'0A');

这会将所有CR+LF转换为LF,并将所有CR转换为LF

然后根据我的应用程序转换输出:

SELECT mycol FROM mytable; -- LF, Unix like systems, ...
SELECT REPLACE(mycol, x'0A', x'0D0A'); -- CRLF, Windows systems, ...
SELECT REPLACE(mycol, x'0A', x'0D'); -- CR, Mac OS (ver<=9), ...