如何将数据从iSQL输出到csv文件_with_标题?

时间:2010-12-04 18:27:49

标签: sql isql sybase-asa

我正在尝试使用iSQL客户端查询Sybase ASA 8数据库,并将查询结果导出为CSV格式的文本文件。但是,列标题不会导出到该文件。在iSQL设置和OUTPUT语句中都没有特殊选项来指定它。

查询和输出语句如下所示:

SELECT * FROM SomeTable;
OUTPUT TO 'C:\temp\sometable.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 个答案:

答案 0 :(得分:9)

我建议从另一个声明开始:

SELECT 'ID;LASTNAME;FIRSTNAME;DOB' FROM dummy;
OUTPUT TO 'C:\\temp\\sometable.csv' FORMAT ASCII DELIMITED BY ';' QUOTE '';

并在您的查询中添加APPEND选项...但我无法让APPEND工作(但我使用的是ASA 11引擎)。

答案 1 :(得分:7)

试试这个

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 '';

答案 2 :(得分:3)

只需添加选项

即可
WITH COLUMN NAMES

到你的语句中,它会添加一个带有列名的标题行。

完整的陈述是:

SELECT * FROM SomeTable; OUTPUT TO 'C:\temp\sometable.csv' FORMAT ASCII DELIMITED BY ';' QUOTE '' WITH COLUMN NAMES

请参阅sybase documentation

答案 3 :(得分:1)

奥利弗,

如果使用“FORMAT EXCEL”选项,它将在第一行输出列名称的行。然后,一旦你将它变成excel,你可以根据需要将其保存为另一种格式。

SELECT * FROM SOMETABLE;
OUTPUT TO 'C:\temp\sometable.xls' FORMAT EXCEL DELIMITED BY ';' QUOTE ''

希望这有帮助。

杰布吉布森

答案 4 :(得分:1)

您已熟悉OUTPUT选项。没有选项可以满足您的需求。

好的,问题是接收端不接受标准的CSV文件,它需要分号。

如果您正在编写脚本,那么最好以最接近您需要的格式获取输出,然后输出文件。非常快,你可以改变你需要的任何东西。我认为您最好的选择是ASCII或默认输出格式,它将在ASCII字符文本文件中提供逗号(非冒号)分隔值,并包括列标题。然后使用单个awk命令将逗号转换为分号。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

找到一个更简单的解决方案,将标题放在一个文件中,如header.txt(它将包含一行“col_1 | col_2 | col_3”)然后将头文件和输出文件组合运行:

cat header.txt my_table.txt > my_table_wth_head.txt

答案 7 :(得分:0)

我可以使用isql命令输出引用的CSV。

实施例

$ isql $DATABASE $USERNAME $PASSWORD -b -d, -q -c
select username, fullname from users

给出了结果:

username,fullname
"jdoe","Jane Doe"
"msmith","Mark Smith"

命令行标志

copied from the man page

-b:以非交互式批处理模式运行isql。在这种模式下,isql处理其标准输入,期望每行一个SQL命令。

-dDELIMITER:使用分隔符分隔列。

-c:输出第一行的列名。仅对-d或-x选项有效。

-q:用双引号括起字符字段。

逃避问题

但是,如果查询结果包含双引号,则可能会遇到问题。引号未正确转义,因此会导致无效的CSV:

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