我有一个使用串联和嵌套select和list ()的firebird请求,然后将其写入文件。第一个命令被设置为关闭头部;
SET HEADING OFF;
SELECT DISTINCT '"' || REPLACE(TRIM(COALESCE(x.column, '')), '"', '""')
|| '"; "' || REPLACE(TRIM(COALESCE(x.column2, '')), '"', '""')
|| '"; "' || REPLACE(TRIM(COALESCE(list(DISTINCT x.column3, ','), '')), '"', '""')
|| '";'
FROM (
SELECT ycolumn AS column, ycolumn1 AS column1, ycolumn2 AS column2, list(DISTINCT ycolumn3, ',') AS column3
FROM (
SELECT d.column AS ycolumn, c.column1 AS ycolumn1, dc.column2 AS ycolumn2, ws.column3 AS ycolumn3
FROM ...
)y
GROUP BY ycolumn, ycolumn1, ycolumn2
) x
GROUP BY x.column, x.column1, x.column3
;问题是嵌套选择的标头没有被禁用,输出文件如下所示:
==============================================================================
0:218
==============================================================================
CONCATENATION:
"field"; "field1"; "field2"; "field3";是否可以禁用所有请求的报头?
发布于 2019-05-28 23:56:31
问题是LIST会生成一个BLOB SUB_TYPE TEXT,而isql默认为使用设置为1的配置BLOBDISPLAY (以显示BLOB SUB_TYPE TEXT)。使用此设置,ISQL将自动输出每行内嵌的所有文本blob,但为了区分哪个blob是哪个blob,它将在显示blob内容时包含列别名。
您可以使用SET BLOBDISPLAY OFF关闭blobdisplay,但是这样查询结果将只显示blob-id,而不显示blob内容,这可能不是您想要的。对于您的问题中的查询,它将仅显示:
0:218另一种方法是将查询转换为足够大的VARCHAR:
SELECT DISTINCT cast('"' || REPLACE(TRIM(COALESCE(x.column, '')), '"', '""')
|| '"; "' || REPLACE(TRIM(COALESCE(x.column2, '')), '"', '""')
|| '"; "' || REPLACE(TRIM(COALESCE(list(DISTINCT x.column3, ','), '')), '"', '""')
|| '";' as varchar(8191))
FROM ...对于字符集UTF8,最大VARCHAR大小为8191,或者对于单字节字符集,最大大小为32765,但是对行长度有额外的限制(总共最大64KB )。
https://stackoverflow.com/questions/56343270
复制相似问题