2013-04-28 4 views
4

Я разработал таблицу со столбцом, данные которого содержат символ \ n (в качестве разделителя я использовал это вместо запятой или чего-то еще). Он должен сохранить \ п символов OK, потому что после загрузки таблицы в DataTable объекта, можно разделить значения в массивы строки с разделителем «\ п», как это:Обнаруживать n символ, сохраненный в таблице SQLite?

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. 

Это означает, что «\ п» существует в моем столбце таблицы. Но когда я попытался выбрать только те строки, которые содержат \ п символ в MyColumn, он дал строки не вернулся, как это:

--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» в качестве разделителя).

спасибо, что заблаговременно!

ответ

7

С \ п является перевод строки символов ASCII, попробуйте следующее:

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

К сожалению, это только предположение; Я сам не использую SQLite.

+0

Вау, твоя догадаться! Это даже чище, чем мое решение. Большое спасибо за эту акцию !!! =) +1 –

+0

Однако вы, возможно, не знаете об операторе конкатенации, используемом в SQLite, это не +, это значение ||. Однако вся идея полезна, поэтому я принял ваш ответ! Вы должны обновить свой ответ, чтобы изменить + на || :) –

+0

Хороший улов; Я обновлю ответ. – BellevueBob

0

Возможно, вам нужно просто искать возврат каретки, если вы не храните в поле «\ n» литерал. Что-то вроде

SELECT * 
FROM table 
WHERE column LIKE '% 
%' 

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

(Не уверен, что если символ (13) и 10 работ для SQLite

ОБНОВЛЕНО: Только что нашел кого-то решение here Они рекомендуют заменить каретка возвращается

Поэтому, если вы хотите их заменить и удалить, вы можете

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

Все ваши предложения не работают.char() не поддерживается, запрос с линией прерывания (некоторый символ ENTER справа в окне запроса =) также не работает. Благодаря! –

0

Следующие должны сделать это для вас

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

Если вы хотите проверить перевозки использования возвратного CHAR(13) вместо или комбинировать их.

+0

Вы уверены, что все перечисленные выше в SQLite, я протестировал и CHAR не поддерживает функцию в SQLite, я использую последнюю версию SQLite. (только что загружен и установлен почти на 1 месяц). Благодаря! –

0

Я нашел решение самостоятельно. Существует несколько способов (с некоторыми выделенными функциями) конвертировать ascii-код в символ в SQLite на данный момент (функция CHAR не поддерживается и использование «\ n» или «\ r» напрямую не работает). Но мы можем преобразовать с помощью функции CAST и переходя в строку Hex (задается дописывания X или х перед строкой) в SQLite, как это:

-- 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» равно 10 в ASCII коде (\р). Я пробовал с '0D' (13 или '\ n'), но это не сработает. Возможно, символ \ n превратится в \ r после сохранения в таблицу SQLite.

Надеюсь, что это поможет другим! Благодаря!

+0

Вы можете использовать' SELECT * FROM MyTable WHERE MyColumn LIKE '%' || char (13) || char (10) || '%' 'для поиска \ r \ n. На самом деле 13 - возврат каретки \ r, а 10 - подача строки \ n. См. [Здесь] (http://www.theasciicode.com.ar/ascii-control-characters/carriage-return-ascii-code-13.html) –