我必须将数据提取到逗号分隔文件.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'。 有没有办法可以确保在我之前删除该名称后面的逗号 使用||','||?
将其写入文件我不想在我的摘录中得到双逗号。 提前谢谢。
答案 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 || '"' ||','||
...
这对于逗号可能对输出有帮助的地址非常有用。当然,你必须确保字符串不包含双引号,或以某种方式逃避它们,但情况可能就是这样。