SqLite替换方法修剪在存在多个回车的情况下返回文本的整个部分而不是回车

时间:2014-03-05 11:25:42

标签: replace sqlite

我想通过SqLite命令行修剪SqLite数据库中的一些回车。 例如(在线模式下):

sqlite> SELECT * FROM my_table;

Id = 10
description = a carriage return here ->
              another carriage return here ->
              rest of the text.

所以我想修剪回车以获得类似的东西(线路模式):

sqlite> SELECT * FROM my_table;

Id = 10
description = a carriage return here -> another carriage return here -> rest of the text.

我试过了:

sqlite> UPDATE my_table SET description=REPLACE(description,x'0A','');

产生这个(行模式):

sqlite> SELECT * FROM my_table;

Id = 10
rest of the text.

这不是开玩笑,再也没有'description =',在列表模式下它看起来像这样:

sqlite> SELECT * FROM my_table;

rest of the text.

不再是Id。

为什么会这样?如果只有一个回车,一切都很好。

提前致谢

1 个答案:

答案 0 :(得分:2)

MS-DOS行结尾由两个控制字符组成,值为13和10。

13是“回车”,它将光标返回到当前行的开头 10是“换行”,它将光标向下移动一行。

在Unix系统上,控制字符10组合了两个动作。不需要字符13,但如果实际使用它,它仍然有效。

当你有MS-DOS行结尾并只删除值为10的字符时,剩余的控制字符将导致行结束后的所有内容覆盖上一行。

您应该删除两个控制字符:

UPDATE my_table
SET description = REPLACE(REPLACE(description, x'0A', ''), x'0D', '')