Как вывести данные из файла 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 для преобразования запятых в полуколоны.


isql -S<Server> -D<Database>-U<UserName> -s \; -P<password>$ -w 10000 -iname.sql > output.csv

найдено более простое решение, поместите заголовки в один файл, скажем, заголовок.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"

флаги командной строки

(скопировано с man-страницы)

-b: запуск isql в неинтерактивном пакетном режиме. В этом режиме isql обрабатывает стандартный ввод, ожидая одну команду SQL в строке.

-dDELIMITER: определяет столбцы с разделителем.

-c: Выводить имена столбцов в первой строке. Имеет какой-либо эффект только с параметрами-d или-x.

-q: оберните поля символов в двойные кавычки.

Экранирование Вопрос

вы можете столкнуться с проблемами, если результаты запроса содержат двойные кавычки. Кавычки не экранируются должным образом, поэтому они приводят к недопустимому CSV:

> select 'string","with"quotes' as quoted_string
quoted_string
"string","with"quotes"