如果我有一个典型的MySQL查询,例如:
SELECT CommentNo, CreatedDate, CreatedTime, Text FROM Comment
结果将显示在一个简单的表格中。但是有可能让MySQL格式化输出,以便根据列中的更改将空行插入到结果中吗?
因此,如果上面的查询默认返回以下内容:
CommentNo CreatedDate CreatedTime Text
1 2012-08-02 15:33:27 This.
2 2012-08-02 15:34:40 That.
3 2013-06-30 19:45:48 Something else.
4 2013-06-30 21:26:01 Nothing.
5 2013-06-30 21:26:43 Was.
6 2013-07-01 13:40:32 Hello.
7 2013-07-01 14:08:25 Goodbye.
是否可以在更改CreatedDate
的列值时插入空白行,因此我得到:
CommentNo CreatedDate CreatedTime Text
1 2012-08-02 15:33:27 This.
2 2012-08-02 15:34:40 That.
3 2013-06-30 19:45:48 Something else.
4 2013-06-30 21:26:01 Nothing.
5 2013-06-30 21:26:43 Was.
6 2013-07-01 13:40:32 Hello.
7 2013-07-01 14:08:25 Goodbye.
以上不是数据如何存储在Comment表中,而是格式化查询输出的问题。
或者在Java中使用BufferedWriter
会更好吗?
答案 0 :(得分:1)
首先,我要说这种格式肯定应该在应用程序层完成而不是查询。
那就是说,这似乎是一个有趣的练习,并不是那么难:
select CommentNo, CreatedDate, CreatedTime, Text
from (select c.*, CreatedDate as key1, 0 as ordering
from comment c
union all
select c2.*, c.CreatedDate, 1
from (select distinct CreatedDate from comment c) c left join
comment c2
on 1 = 0
) c
order by key1, ordering, id;
请注意在第二个子查询中使用left join
来引入所有列,因此它与第一个子查询中的select *
匹配。但是,删除最后两列仍然需要列出所有这些列。
答案 1 :(得分:-1)
我已经调整了在enter link description here找到的代码,它可以很容易地扩展为在解析数据时包含一行来编写.csv文件。
// Iinitialise FileWriter object.
fileWriter = new FileWriter(fileName);
// Iinitialise CSVPrinter object/ t.
csvFilePrinter = new CSVPrinter(fileWriter, csvFileFormat);
// Create .csv file header.
csvFilePrinter.printRecord(FILE_HEADER);
// Write a new student object list to the .csv file.
for (Student student : students) {
ArrayList studentDataRecord = new ArrayList();
studentDataRecord.add(String.valueOf(student.getId()));
studentDataRecord.add(student.getFirstName());
studentDataRecord.add(student.getLastName());
studentDataRecord.add(student.getGender());
studentDataRecord.add(String.valueOf(student.getAge()));
csvFilePrinter.printRecord(studentDataRecord);
csvFilePrinter.println();
}
虽然我还没有添加代码来确定所需列值的变化,但这很简单。