2016-08-05 7 views
2

При вставке значений в таблицу SQLite можно использовать синтаксис типа x'41 '(= A). Это полезно, когда вы пытаетесь вставить специальные символы, такие как вкладки, переводы строки и т.д.SQLite: используйте синтаксис x'abc при создании таблицы

sqlite> CREATE TABLE test(aColumn VARCHAR(10)); 
sqlite> INSERT INTO test VALUES(x'0a41420a'); 
sqlite> SELECT * FROM test; 

AB 

sqlite> 

Является ли это синтаксис для определения имени таблицы, тоже?

Что-то вроде

sqlite> CREATE TABLE x'0a41420a'(aColumn VARCHAR(10)); 
Error: near "x'0a41420a'": syntax error 

не работает.

ответ

1

Синтаксис x'..' указывает blob literal. Таким образом, значение в таблице не является строкой, но капля, если вы явно convert его в строку:

INSERT INTO test VALUES(CAST(x'0a41420a' AS TEXT)); 

В SQL, идентификаторы (например, имена таблиц/столбцов) может быть заключен в двойные кавычки. Внутри цитируемого идентификатора допускаются все символы (кроме нулевого байта) (но двойные кавычки должны быть удвоены):

sqlite> CREATE TABLE " 
AB 
"(cols); 
sqlite> SELECT hex(name) FROM sqlite_master; 
0A41420A 
+0

Спасибо за разъяснение с помощью синтаксиса x '..'. Вы правы, начиная с двойной цитаты. Я могу использовать символы новой строки. Но как насчет вкладки (или более необычных белых пробелов, таких как \ v, \ r, \ f ...)? Кажется, невозможно использовать вкладку внутри командной строки sqlite (даже после начала двойной кавычки). Есть ли другое решение, например. записывая свои шестнадцатеричные значения (= ascii-представление, вот что я думал о синтаксисе x '..') для использования)? – CFP

+0

«Все» означает «все». Вкладка работает для меня. –

+0

Каждый персонаж возможен, это правда. Не работает непосредственно в командной оболочке sqlite, но работает, когда я создаю входной файл и подключаю его к командной оболочке. – CFP

Смежные вопросы