我正在使用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), ' ')
答案 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)
使用REPLACE
或TRANSLATE
函数:
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中的回车,换页和换行。