5

我设计了一个表格,其数据包含 \n 字符(作为分隔符,我使用它而不是逗号或其他任何内容)。它必须保存 \n 字符,因为在将表加载到 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

4 回答 4

11

由于 \n 是 ASCII 换行符,请尝试以下操作:

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

抱歉,这只是一个猜测;我自己不使用 SQLite。

于 2013-04-28T21:10:01.700 回答
0

以下应该为你做

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

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

于 2013-04-28T20:38:52.917 回答
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

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

因此,如果您想更换它们并剥离退货,您可以

     update yourtable set yourCol = replace(yourcol, '
     ', ' ');
于 2013-04-28T20:34:26.073 回答
0

我自己找到了解决方案。目前在 SQLite 中很少有方法(使用一些专用函数)将 ascii 代码转换为符号(不支持 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'),但它不起作用。也许 \n 字符在保存到 SQLite 表后变成了 \r 。

希望这对其他人有帮助!谢谢!

于 2013-04-28T21:14:54.973 回答