检测保存在SQLite表中的\ n字符?

时间:2013-04-28 20:17:57

标签: sql sqlite select carriage-return

我设计了一个表,其中一列的数据包含\ n字符(作为分隔符,我使用它而不是逗号或其他任何东西)。它必须保存\ n字符OK,因为在将表加载到DataTable对象后,我可以使用分隔符' \ n'将值拆分为字符串数组。像这样:

DataTable dt = LoadTable("myTableName");
DataRow dr = dt.Rows[0]; //suppose this row has the data with \n character.
string[] s = dr["myColumn"].ToString().Split(new char[]{'\n'}, StringSplitOptions.RemoveEmptyEntries);//This gives result as I expect, e.g an array of 2 or 3 strings depending on what I saved before.

这意味着' \ n'确实存在于我的表列中。但是当我尝试只选择myColumn中包含\ n字符的行时,它没有返回任何行,如下所示:

--use charindex
SELECT * FROM MyTable WHERE CHARINDEX('\n',MyColumn,0) > 0
--use like
SELECT * FROM MyTable WHERE MyColumn LIKE '%\n%'

我想知道我的查询是否错误?

我还测试过' \ r \ n'和' \ r'但结果是一样的。

如何检测行是否包含' \ n'我桌子上的角色?这是选择我想要的行所必需的(这是我选择' \ n'作为分隔符时的设计。)

非常感谢你!

4 个答案:

答案 0 :(得分:8)

由于\ n是ASCII换行符,请尝试:

SELECT * 
FROM MyTable 
WHERE MyColumn LIKE '%' || X'0A' || '%'

对不起,这只是猜测;我自己不使用SQLite。

答案 1 :(得分:0)

如果你不在字段中存储“\ n”文字,也许你应该只是寻找回车。像

这样的东西
  SELECT *
 FROM table
 WHERE column LIKE '%
 %'

select * from table where column like '%'+char(13)+'%' or column like '%'+char(10)+'%'

(不确定char(13)和10是否适用于SQLite

更新:刚找到某人的解决方案here他们建议更换回车

因此,如果您想要替换它们并去除回报,您可以

     update yourtable set yourCol = replace(yourcol, '
     ', ' ');

答案 2 :(得分:0)

以下内容应该为您做到

SELECT *
FROM your_table
WHERE your_column LIKE '%' + CHAR(10) + '%'

如果您想测试回车,请改为使用CHAR(13)或将它们组合起来。

答案 3 :(得分:0)

我自己找到了解决方案。目前很少有方法(使用一些专用函数)将ascii代码转换为SQLite中的符号(CHAR函数不支持并且使用'\ n'或'\ r'直接不起作用)。但我们可以使用CAST函数进行转换,并在SQLite中传入十六进制字符串(在字符串之前追加X或x指定),如下所示:

-- use CHARINDEX
SELECT * FROM MyTable WHERE CHARINDEX(CAST(x'0A' AS text),MyColumn,0) > 0
-- use LIKE
SELECT * FROM MyTable WHERE MyColumn LIKE '%' || CAST(x'0A' AS text) || '%'

十六进制字符串'0A'在ascii代码(\ r)中等于10。我试过'0D'(13或'\ n'),但它不起作用。保存到SQLite表后,\ n字符可能会转到\ r \ n。

希望这有助于他人!谢谢!