2013-10-25 119 views
2

我有一個sqlite數據庫數以千計的文字條目。該文本有很多不可見/隱藏的回車,它顯示了一個長行中的文本。它在某些程序上顯示正常,而在其他程序上則不顯示。如果我只是刪除這些隱藏的回車並通過點擊'回車'按鈕來替換它們,一切正常。我的問題是如何用正常的回車替換這些隱藏的字符(我相信是CHAR(13)或CHAR(10)),就像我點擊回車按鈕一樣。什麼是正確的SQLite查詢?我找到了一些關於用空白空間替換它們的例子,但是沒有用正常段落替換它們的例子。sqlite查詢替換隱藏/不可見的回車與合法的回車

這裏是我的意思的例子:

從羊毛產量England-機箱增長-Result是這在以前是農場的土地,他們都變成了牧場的sheep-誰一直在研究的農奴以前的農田被拆遷戶

這是我想它顯示的內容:

  • 在英國從羊毛產量增長的結果
  • 外殼是土地這在以前是農場,他們都變成了牧場的羊
  • 誰一直在努力以前的農場土地上的農奴evictedd

我可以只是去和刪除這些隱藏的回車和擊中做到這一點輸入按鈕。我可以爲整個數據庫做到這一點,但這需要大約3個月的時間。

任何幫助將不勝感激。

+0

炭灰的13個10不隱藏回車。他們是你價值觀中的寶貴人物。將它們保存在你的數據庫中,並在你用來顯示它們的任何應用程序代碼中處理它們。 –

+0

那麼,當我在sqlite編輯器中點擊「輸入」按鈕時會發生什麼?這照顧到了這個問題。我只需要用那個替換那些。 –

+0

您需要找出實際使用的控制字符。運行'SELECT hex(TheColumn)FROM TheTable WHERE ID = 42'。 –

回答

3

「正常」換行符取決於應用程序。的確,不同的操作系統使用不同的換行符

我想,第一,獲得一定有所有線路在數據庫中打破了規範化 - 我更喜歡一個LFx'0A'),所以我想確保我的數據只使用了這種性格:

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

這將全部CR+LF轉換爲LF,它們全部保留CRLF也。根據需要爲我的應用程序

然後轉換輸出:

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), ... 
+0

這工作。謝謝。 –