Java H2-为什么组_CONCAT拒绝具有空值的行?

Java H2-为什么组_CONCAT拒绝具有空值的行?,java,null,field,h2,group-concat,Java,Null,Field,H2,Group Concat,运行以下脚本: drop table if exists foo cascade; create table foo( id int NOT NULL auto_increment, start date NOT NULL, end date ); insert into foo(start,end) values('2007-01-01', '2007-12-31'); insert into foo(start,end) values('2007-

运行以下脚本:

drop table if exists foo cascade;
create table foo(
       id int NOT NULL auto_increment,
       start date NOT NULL,
       end date
);

insert into foo(start,end) values('2007-01-01', '2007-12-31');
insert into foo(start,end) values('2007-01-01', NULL);

SELECT
     COUNT(*) nb,
     GROUP_CONCAT(
             id || '-' || start || '-' || end
             SEPARATOR CHAR(10)
      ) final
FROM
     foo;
为什么H2返回这个

-------------------------------
|NB |  FINAL                  |
-------------------------------
|2  | 1-2007-01-01-2007-12-31 |
-------------------------------
而不是

-------------------------------
|NB |  FINAL                  |
-------------------------------
|2  | 1-2007-01-01-2007-12-31 |
|   | 2-2007-01-01-NULL       |
-------------------------------
?


如何更改查询以获得预期结果?

对于H2,如果一个运算符为
NULL
,则默认情况下,运算符
|
返回
NULL
。此行为与许多其他数据库(包括PostgreSQL)中的行为相同

然而,MySQL并不是这样工作的。H2支持行为不同的for MySQL。请注意,在使用MySQL模式时,H2与MySQL仍然不是100%兼容,但这方面有所改变

如果使用MySQL模式运行上述语句(
set mode MySQL
或在数据库URL中追加
;mode=MySQL
),则结果是:

2   1-2007-01-01-2007-12-31
    2-2007-01-01-
因此,
NULL
被转换为空字符串

也许更好的方法是不依赖MySQL模式,而是使用
CONCAT
而不是
|
。这是更标准的方法,因为它也应该与其他数据库一起使用:

concat(id, '-', start, '-', end)

为什么
NB
在所需结果的第一行上有值2?还有,是什么让行分隔成行?你需要一些东西来
分组
@JoachimIsaksson我希望只有一行。第一列包含2,第二列包含一个包含字符(10)的字符串。