我想通过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。
为什么会这样?如果只有一个回车,一切都很好。
提前致谢
答案 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', '')