如何确保源代码中没有逗号值?

时间:2014-01-17 10:56:19

标签: sql oracle csv

我必须将数据提取到逗号分隔文件.csv 所以我正在使用一个游标和一个看起来像这样的for循环:

CURSOR l_body IS
SELECT b.brn_code                            ||','|| 
       t.terminal_no                         ||','||
       t.pos_username                        ||','||
       to_char(t.trn_datetime,'dd-Mon-yyyy') ||','||
       to_char(t.trn_datetime,'hh24:mi:ss')  ||','||
       t.trn_type_code);
FROM tables etc.

我的循环看起来像这样:

FOR x IN l_body LOOP
    utl_file.put_line(out_file_laybye, x.data_line);
    END LOOP;

现在说比较我的表中的用户名是'John Doe'。 有没有办法可以确保在我之前删除该名称后面的逗号 使用||','||?

将其写入文件

我不想在我的摘录中得到双逗号。 提前谢谢。

1 个答案:

答案 0 :(得分:4)

您可以使用replace()功能删除每个值中的逗号:

select replace(', this, is, a, test,', ',', null) from dual;

REPLACE(',THIS,
---------------
 this is a test

您需要为每个列执行此操作,所以

...
       replace(t.pos_username, ',', null)    ||','||
...

你也可以替换不同的角色,你也可以使用translate()

select translate(', this, is, a, test,', ',', ' ') from dual;

TRANSLATE(',THIS,IS,
--------------------
  this  is  a  test

根据输出的使用位置,您可能更喜欢保留逗号但以某种方式逃避它们。例如,如果您的CSV将在Excel中使用,则可以将列值包装在双引号中,以便值中的逗号不会与分隔符混淆:

...
       '"' || t.pos_username || '"'          ||','||
...

这对于逗号可能对输出有帮助的地址非常有用。当然,你必须确保字符串不包含双引号,或以某种方式逃避它们,但情况可能就是这样。