注册

select子查询使用union并且字段有char(1)类型时,返回结果集中出现多余空格

一往无前 2026/01/14 687 4

【DM版本】:

DM Database Server 64 V8
DBVersion: 0x7000d
03134284368-20250430-272000-20149
Msg Version: 43
Gsu level(5)cnt:0

【操作系统】:
【问题描述】*:

select子查询使用union并且字段有char(1)类型时,返回结果集中出现多余空格

相关参数

SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME IN ('LANGUAGE', 'CHARSET', 'LENGTH_IN_CHAR');

返回结果:LENGTH_IN_CHAR 0

表结构:

CREATE TABLE JS_SYS_MENU ( MENU_CODE VARCHAR2(64) NOT NULL, MENU_NAME VARCHAR2(100) NOT NULL, MENU_TYPE CHAR(1) NOT NULL, MENU_HREF VARCHAR2(1000) NULL, WEIGHT NUMBER(4,0) NULL, IS_SHOW CHAR(1) NOT NULL, STATUS CHAR(1) DEFAULT '0' NOT NULL, CONSTRAINT CONS134218916 PRIMARY KEY (MENU_CODE) );

查询SQL

SELECT a.menu_code AS "menuCode", a.menu_name AS "menuNameRaw", trim(a.menu_type) AS "menuType", a.menu_href AS "menuHref", a.weight AS "weight", trim(a.is_show) AS "isShow", trim(a.status) AS "status" FROM ( SELECT DISTINCT a.* FROM js_sys_menu a WHERE a.status = '0' UNION SELECT DISTINCT a.* FROM js_sys_menu a WHERE a.status = '1' ) a ORDER BY a.menu_code

实际子查询中js_sys_menu会有一些关联表,所以需要 UNION,但为方便问题复现,我删除了join,仅添加一个条件

临时解决方法

添加 trim 函数,比如:trim(a.status) AS "status" 可以避免该问题

旧版本中正常

但我在达梦旧版本中,未出现上述问题,版本:
DM Database Server 64 V8
DB Version: 0x7000c
03134284058-20230726-197096-20046

但 LENGTH_IN_CHAR 参数为 1,不知道是否有关系?

因为项目中用到的 char(1) 类型字段较多,多处使用了 UNION,期待回复,谢谢。

回答 0
暂无回答
扫一扫
联系客服