我正在使用一个函数从SQL数据库中提取数据并将其回显到一个文件,然后通过电子邮件发送。 但是,CSV文件中的某些字段(使用Microsoft Excel打开时)显示前导/尾随空格。
SQL示例:
function pull_data
{
sqlplus -s $user/$pass@$db <<EOF
SET COLSEP ,
SET LINESIZE 10000
SET PAGESIZE 50000
SET NEWPAGE NONE
SET HEADING OFF
SET FEEDBACK OFF
SET ECHO OFF
SELECT DISTINCT order_number,
TO_CHAR(entry_date,'DD/MM/YYYY'),
TO_CHAR(delivery_date,'DD/MM/YYYY'),
cust_name,
...
}
echo "$(pull_data $a $b)" > $id.csv
间距示例(无法通过Stack Overflow上传):
http://s3.postimg.org/ekgt9ig4f/Capture.png
可以做些什么来使输出正确,即没有前导或尾随空格?
答案 0 :(得分:1)
好的,所以在这种情况下,如何选择列并不重要。修剪可以通过OS shell完成,而不是尝试在Oracle中完成。
更改最后一行:
echo "$(pull_data $a $b)" > $id.csv
到
echo "$(pull_data $a $b)" | tr -d '\040\011' > $id.csv
这使用linux tr
(translate)实用程序从输出中删除空格(\ 040)和制表符(\ 011)。
如果输出需要包含显式空格,则将它们替换为数据中不存在的字符,但这是一个相当不优雅的黑客。变化:
SELECT COL1,
COL2 || ' ' || COL3
FROM ...
到
SELECT COL1,
COL2 || '###' || COL3
FROM ...
,最后一行变为:
echo "$(pull_data $a $b)" | tr -d '\040\011' | tr --squeeze-repeats [#] ['\040'] > $id.csv
答案 1 :(得分:0)
http://www.oracle-base.com/articles/9i/generating-csv-files.php
我发现他的网站是Oracle内容的最佳来源之一
如果您有CHAR列,请使用TRIM函数删除前导/尾随空格