8

我正在尝试使用 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

有什么提示吗?

4

9 回答 9

10

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

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

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

于 2011-01-28T04:09:44.607 回答
9

试试这个

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 '';
于 2011-10-13T20:17:00.977 回答
3

只需添加选项

WITH COLUMN NAMES

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

因此,完整的陈述是:

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

请参见sybase 文档

于 2014-09-04T13:22:37.890 回答
3

我可以使用该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"
于 2017-12-07T21:52:20.403 回答
1

如果您使用该FORMAT EXCEL选项,它将在第一行输出具有列名的行。然后,一旦您将其放入 excel 中,您可以根据需要将其保存为另一种格式。

SELECT * FROM SOMETABLE;
OUTPUT TO 'C:\temp\sometable.xls' FORMAT EXCEL DELIMITED BY ';' QUOTE ''
于 2010-12-05T20:46:08.987 回答
1

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

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

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

于 2010-12-13T04:09:13.913 回答
1
isql -S<Server> -D<Database>-U<UserName> -s \; -P<password>\$\1 -w 10000 -iname.sql > output.csv
于 2016-12-12T15:24:25.570 回答
0

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

cat header.txt my_table.txt > my_table_wth_head.txt
于 2013-06-12T10:17:40.010 回答
0

最近我需要解决一些史前 ASA7 的类似问题,它支持 .CSV 输出的WITH COLUMN NAMES

我的解决方案是.DBF文件,其中包含列结构并且可以自动处理,比 .XLS 好得多

SELECT * FROM SomeTable;
OUTPUT TO 'C:\temp\sometable.dbf' FORMAT DBASEIII;
于 2021-09-30T19:41:19.887 回答