【问题标题】:SQL Get Delimited Results for All ColumnsSQL 获取所有列的分隔结果
【发布时间】:2012-12-08 01:05:27
【问题描述】:

我正在编写一个简单的 SQL 语句来生成要加载到数据库中的 BCP 文件。

这些 BCP 文件采用以下格式:

1|name|otherfield|otherfield1

要构建这样的文件,我目前正在做:

SELECT id+"|"+name+"|"+otherfield+"|"+otherfield1+"\n" FROM table

是否有一个 select 语句可以选择 every column 而不必命名它们?

类似

SELECT * with "|" from Table

【问题讨论】:

  • 一开始这真的是正确的方法吗?如果您的一列包含“|”怎么办?没有您应该应用的转义规则吗?
  • @deceze 这是一个很好的观点,不幸的是,读取这些内容的脚本“超出我的控制范围”并期望 |并且不支持任何转义字符。这是古老的“它有效,所以不要碰它”。
  • 之前有一个mysql标签但是已经被删除了。知道为什么吗?

标签: sql sybase


【解决方案1】:

你可以使用SELECT ... INTO OUTFILE

SELECT * INTO OUTFILE 'filename'
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'
FROM yourtable;

http://dev.mysql.com/doc/refman/5.6/en/select-into.html

【讨论】:

  • 这是一个 Sybase 数据库,不是 MYSQL
  • 奇怪...之前被贴了mysql的标签,现在标签没了。
【解决方案2】:

如果你想在文件中输出,那么你可以试试这个

SELECT *
INTO OUTFILE 'D://abc.txt'
FIELDS TERMINATED BY '|' LINES TERMINATED BY '\r\n'
FROM table

这里我使用\r\n 在新行上输出每一行(在窗口上)

【讨论】:

  • 这适用于 Sybase 数据库,而不是 MySql
【解决方案3】:

对于 Sybase ASE,为什么不使用内置的 bcp 实用程序更改分隔符。默认情况下,它将捕获所有列。

bcp MYDATABASE..MYTABLE out MYTABLEFILE.bcp -Uusername -Ppassword -SMYSERVER -c -t|

您必须使用 -t 选项来设置列分隔符,该选项只能与指定“字符”(人类可读)的 -c 选项一起使用基于 bcp 输出。如果您在基于 Unix/Linux 的系统上,则可能必须转义管道,例如-\t

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多