我设计了一个表,其中一列的数据包含\ 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'作为分隔符时的设计。)
非常感谢你!
答案 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。
希望这有助于他人!谢谢!