簡體   English   中英

從SQL導出的CSV數據中的前導和尾隨空格

[英]Leading and trailing spaces in CSV data exported from SQL

我正在使用一個函數從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

間距示例(無法通過堆棧溢出上傳):

http://s3.postimg.org/ekgt9ig4f/Capture.png

如何使輸出正確,即沒有前導空格或尾隨空格?

好的,因此在這種情況下,如何選擇列實際上並不重要。 可以通過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

蒂姆·霍爾(Tim Hall)對此發表了一篇文章:

http://www.oracle-base.com/articles/9i/generating-csv-files.php

我發現他的網站是有關Oracle的最佳資源之一

如果您有CHAR列,請使用TRIM函數刪除前導/后綴空格

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM