Sql 如何使用*或WHERE子句定义字符串从DB2导出

Sql 如何使用*或WHERE子句定义字符串从DB2导出,sql,db2,export,export-to-csv,Sql,Db2,Export,Export To Csv,我使用DB2Export将数据保存到CSV文件中 最终,我需要一个构建的脚本,该脚本将接收SQL,运行它并将其导出。我已经准备好了几乎所有的内容,但是某些查询会导致错误 目前有两种情况会导致错误: 1-使用通配符。外壳扩展杀死了它 将整个SQL封装在中似乎可以解决这个问题,但最佳实践是什么?似乎有些边缘问题我还没有解决 2-我不能在where子句中使用字符串: bash-3.00$ db2 export to /tmp/text of DEL 'select * from SCHEMA.TABL

我使用DB2Export将数据保存到CSV文件中

最终,我需要一个构建的脚本,该脚本将接收SQL,运行它并将其导出。我已经准备好了几乎所有的内容,但是某些查询会导致错误

目前有两种情况会导致错误:

1-使用通配符。外壳扩展杀死了它

将整个SQL封装在中似乎可以解决这个问题,但最佳实践是什么?似乎有些边缘问题我还没有解决

2-我不能在where子句中使用字符串:

bash-3.00$ db2 export to /tmp/text of DEL 'select * from SCHEMA.TABLE where COL='STRING''
SQL3022N  An SQL error "-206" occurred while processing the SELECT string in
the Action String parameter.

SQL0206N  "STRING" is not valid in the context where it is used.
即使更改为特定列以选择并从整个SQL中删除“”也不会改变它

有什么想法吗

谢谢


Alex

当查询字符串中的单引号关闭引号时,必须对其进行转义。看看解决方案。但在你的情况下,我认为在你的报价单中使用双引号而不是单引号就足够了。

@mru是正确的,但我认为一个工作示例会更有帮助:

 db2 "export to /tmp/text of DEL select * from SCHEMA.TABLE where COL='STRING' "
这里的重要因素是SQL select没有被引用,只是字符串文本的内容

下面是另一种方法,用于转义与命令行shell不兼容的角色:

db2 export to /tmp/text of DEL select \* from SCHEMA.TABLE where COL=\'STRING\'

我可以使用直接的db2命令,而不是db2导出,但这不会给我csv,我必须在select中的每个字段之间执行类似于“| |”、“| |”的操作来伪造csv。考虑到我想使用任意SQL语句,我不想强制进行这种定制。嗯,没那么漂亮。因此,我想,我必须在我的脚本中加入一个函数,以替换我上一句中提到的所有'with''''''@Alex'实例,或者通过Fred的回答,您只需将语句周围的单引号替换为
,比如
db2 export to/tmp/text of DEL“select*from SCHEMA.TABLE where COL='STRING'“
这是可行的-但是,我在将其转换为变量以传递到脚本中时遇到了问题。因此,如果我从命令行运行db2,我就没事了。但是,尝试执行db2导出到DEL“$SQL”的/tmp/text这样的操作,$SQL来自SQL=
cat query.SQL
我发现它扩展了*。如果我在文件中用*转义,那么查询将失败,因为它不喜欢“谢谢,但是,他先到了”中的*。