[英]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.