在SQL查询中转义换行符

时间:2018-07-28 16:55:39

标签: java sql oracle java-8

我正在使用Java代码读取表并从中创建一个csv文件。所以我得到的4行转换类似于下面-

sam , 18 , banker , He likes to play football 
jam , 28 , hacker , he likes nothing

但是在某些情况下,当最后一个varchar2列包含\ n时,它会变成这样

sam , 18 , banker , He likes 
                    to play
                    football 
jam , 28 , hacker , he 
                    likes
                    nothing

当我尝试读取文件时,每一行一次被读取,由于少数单词被压入后续行,因此我无法解析数据。有没有一种方法可以在查询的列中转义换行符以使其变成一行?

我的SQL查询

select name , age , job , hobbies from person_details

我正在使用csvwriter生成csv文件-

CSVWriter csvWriter = new CSVWriter(new FileWriter(results), DELIMITER, Character.MIN_VALUE, CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.DEFAULT_LINE_END);

我使用以下内容删除了换行符。但是,也在寻找保留它们的方法-

replace (replace (hobbies, chr (13), ''), chr (10), ' ')

3 个答案:

答案 0 :(得分:1)

取决于另一侧的CSV解析器。由于CSV尚未真正标准化,因此它们的行为差异很大。但是,请尝试将字符串用双引号引起来。

SELECT '"' || name || '"',
       age,
       '"' || job || '"',
       '"' || hobbies || '"'
       FROM person_details;

但是JB Nizet的评论有道理。在Java代码中进行转换可能是最好的主意。

答案 1 :(得分:1)

在查询时删除\n。使用以下查询。

select name , age , job , REPLACE(hobbies,CHR(10),'') "hobbies" from person_details

答案 2 :(得分:1)

使用REPLACETRANSLATE函数:

SELECT NAME, AGE, JOB, REPLACE(HOBBIES, CHR(10), '')
  FROM PERSON_DETAILS

SELECT NAME, AGE, JOB, TRANSLATE(HOBBIES, 'x' || CHR(10) || CHR(12) || CHR(13), 'x')
  FROM PERSON_DETAILS                         --     LF         FF         CR
如果要进行多种翻译,

TRANSLATE很有用。在这里,我增加了响应以消除HOBBIES中的回车,换页和换行。