Как вывести данные из файла iSQL в csv с заголовками?
Я пытаюсь запросить базу данных Sybase ASA 8 с клиентом iSQL и экспортировать результаты запроса в текстовый файл в формате CSV. Однако заголовки столбцов не экспортируются в файл. Нет специальной опции, чтобы указать это, ни в настройках iSQL, ни в инструкции OUTPUT.
оператор запроса и вывода выглядит следующим образом:
SELECT * FROM SomeTable;
OUTPUT TO 'C:tempsometable.csv' FORMAT ASCII DELIMITED BY ';' QUOTE ''
В результате получается файл типа
1;Miller;Steve;1980-06-28
2;Jones;Martha;1965-11-02
3;Waters;Richard;1979-10-15
в то время как я хотел бы есть
ID;LASTNAME;FIRSTNAME;DOB
1;Miller;Steve;1980-06-28
2;Jones;Martha;1965-11-02
3;Waters;Richard;1979-10-15
какие-то намеки?
8 ответов
Я бы предложил начать с другого заявлении:
SELECT 'ID;LASTNAME;FIRSTNAME;DOB' FROM dummy;
OUTPUT TO 'C:\temp\sometable.csv' FORMAT ASCII DELIMITED BY ';' QUOTE '';
и добавить APPEND
опция в вашем запросе... но я не могу получить APPEND
для работы (но я использую двигатель ASA 11).
попробуй этот
SELECT 'ID','LASTNAME','FIRSTNAME','DOB' union
SELECT string(ID),LASTNAME,FIRSTNAME,DOB FROM SomeTable;
OUTPUT TO 'C:\temp\sometable.csv' FORMAT ASCII DELIMITED BY ';' QUOTE '';
просто добавьте опцию
WITH COLUMN NAMES
к вашему заявлению, и он добавляет строку заголовка с именами столбцов.
таким образом, полное утверждение:
SELECT * FROM SomeTable; OUTPUT TO 'C:\temp\sometable.csv' FORMAT ASCII DELIMITED BY ';' QUOTE '' WITH COLUMN NAMES
посмотреть документация sybase.
Оливер
Если вы используете опцию "формат EXCEL", он выведет строки с именем столбца в первой строке. Затем, когда вы получите его в Excel, вы можете сохранить его в другом формате, если вам нужно.
SELECT * FROM SOMETABLE;
OUTPUT TO 'C:\temp\sometable.xls' FORMAT EXCEL DELIMITED BY ';' QUOTE ''
надеюсь, что это помогает.
Джефф Гибсон
вы уже знакомы с параметрами вывода. Нет выбора, который дает вам то, что вы хотите.
Ok, проблема в том, что принимающая сторона не принимает стандартные CSV-файлы, ей нужны полу-двоеточия.
Если вы пишете сценарии, то вам лучше получить вывод в формате, который ближе всего к тому, что вам нужно, а затем awk-ing выходного файла. Очень быстро, и вы можете изменить все, что вам нужно. Я думаю, что ваш лучший вариант-ASCII или формат вывода по умолчанию, который будет предоставлять значения, разделенные запятыми (а не двоеточием), в текстовом файле ASCII и включает заголовки столбцов. Затем используйте одну команду awk для преобразования запятых в полуколоны.
найдено более простое решение, поместите заголовки в один файл, скажем, заголовок.txt (он будет содержать одну строку "col_1|col_2|col_3"), чтобы объединить файл заголовка и ваш выходной файл:
cat header.txt my_table.txt > my_table_wth_head.txt
Я могу использовать isql
команда для вывода цитируемого CSV.
пример
$ isql $DATABASE $USERNAME $PASSWORD -b -d, -q -c
select username, fullname from users
дает результат:
username,fullname
"jdoe","Jane Doe"
"msmith","Mark Smith"
флаги командной строки
-b
: запуск isql в неинтерактивном пакетном режиме. В этом режиме isql обрабатывает стандартный ввод, ожидая одну команду SQL в строке.
-dDELIMITER
: определяет столбцы с разделителем.
-c
: Выводить имена столбцов в первой строке. Имеет какой-либо эффект только с параметрами-d или-x.
-q
: оберните поля символов в двойные кавычки.
Экранирование Вопрос
вы можете столкнуться с проблемами, если результаты запроса содержат двойные кавычки. Кавычки не экранируются должным образом, поэтому они приводят к недопустимому CSV:
> select 'string","with"quotes' as quoted_string
quoted_string
"string","with"quotes"