我最近创建了一个使用sqlplus自动化提取的cron。我的.sh如下:
alter session set nls_numeric_characters= '.,' ;
alter session set nls_date_format='DD-MM-YYYY HH24:MI:SS';
set colsep ";"
SET TRIMSPOOL ON
SET HEADING OFF
set echo off
SET FEEDBACK OFF
set verify off
set linesize 32767
set pagesize 0
set pause off
set termout off
set newp none
set space 0
set wrap off
set trim on
spool /data/Tools/Extract_W7/w7_errors.csv
Select HOST ||';'|| PORT ||';'|| PID ||';'|| OPX2DATE ||';'|| OPX2USER ||';'|| IP ||';'|| INFO from V_W7_ERRORS where OPX2DATE > SYSDATE - 100;
spool off;
exit;
问题是在我的摘录中有一个带有特定符号的“INFO”列,例如; / @#,..所以我认为它混淆了使用的colsep“;”随着;在细胞中。
我尝试了不同的字符,但每次我遇到同样的问题(在同一个单元格中连接了很多行),因为我使用的字符已经在我的信息列中使用。
有什么想法吗?
答案 0 :(得分:1)
通过连接查询中的列号,将列内容用双引号括起来:
Select HOST ||';'|| PORT ||';'|| PID ||';'|| OPX2DATE ||';'|| OPX2USER
||';'|| IP ||';"'|| INFO || '"'
from V_W7_ERRORS where OPX2DATE > SYSDATE - 100;
重要位是';"'|| INFO || '"' which puts a
“INFO内容的任一侧;请注意,双引号标记本身在单引号内,因此它作为字符串的一部分输出,不被视为带引号的标识符
输出如下:
...;192.168.0.1;"Some info; embedded semicolon is OK now"
当您在Excel中打开文件时,它不会将双引号括起的部分中的任何分号视为列分隔符,就像作为单元格值一部分的文本一样。
您可以在双引号中包含任意数量的列 - 任何可能包含分号的列。您可能希望将它们全部包含在内作为预防措施。