代码之家  ›  专栏  ›  技术社区  ›  Punter Vicky

在sql查询中转义新行字符

  •  0
  • Punter Vicky  · 技术社区  · 7 年前

    我正在使用Java代码读取一个表,并从中创建CSV文件。所以我转换的4行如下-

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

    但是在某些情况下,当最后一个varchar2列包含

    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 回复  |  直到 7 年前
        1
  •  1
  •   sticky bit    7 年前

    取决于另一边的csv解析器。它们在行为上有很大的不同,因为csv并不是真正的标准化。但请尝试用双引号将字符串括起来。

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

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

        2
  •  1
  •   Bob Jarvis - Слава Україні    7 年前

    使用 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
    

    翻译 如果要进行多个翻译,则非常有用。在这里,我增加了响应以消除爱好中的回车、表单提要和换行。

        3
  •  1
  •   Pankaj Singhal    7 年前

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

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