Sql 正在截断的列别名

Sql 正在截断的列别名,sql,oracle,sqlplus,Sql,Oracle,Sqlplus,使用SQL*Plus,我尝试使用select union语句组合来自同一个表的两列的结果,如下所示: select substr(startdate,4,3) milestone from projects union select substr(enddate,4,3) milestone from projects 对列使用别名mile,但由于某种原因,结果显示为列名mil。由于某种原因,它被截断了,substr部分就是问题所在,因为它从stardate和enddate列中

使用SQL*Plus,我尝试使用select union语句组合来自同一个表的两列的结果,如下所示:

select substr(startdate,4,3) milestone 
  from projects 
union 
select substr(enddate,4,3) milestone 
  from projects
对列使用别名
mile
,但由于某种原因,结果显示为列名
mil
。由于某种原因,它被截断了,
substr
部分就是问题所在,因为它从
stardate
enddate
列中获取了3个字符。如何解决此问题?

这有帮助吗-

SQL> set linesize 100
SQL> column milestone format a25
SQL> select substr(startdate,4,3) "milestone"
  from projects 
union 
select substr(enddate,4,3) "milestone" 
  from projects;

您很可能需要设置列宽

COLUMN MILESTONE FORMAT A20
SET VERIFY ON
SET HEADING ON
SET PAGES 25
SET LINES 60

select substr(startdate,4,3) milestone 
  from projects 
union 
select substr(enddate,4,3) milestone 
  from projects

这是因为您使用的是sql plus。如果我在我的数据库GUI(PL/SQLDeveloper)中运行相同的查询,它可以正常工作,但在sqlplus中,它只是截断列标题以适合数据

我不是sqlplus的专家,但这解决了问题:

SQL> column milestone format a20;
SQL> select substr(sysdate,4,3) milestone from dual;
结果:

MILESTONE
--------------------
OCT

所以为了验证您的理论,您是否将3更改为不同的值并检查了结果?否则,是否只是需要调整正在使用的数据库查看器的列的大小?听起来像是在描述一个显示问题。您使用什么工具来显示结果?SQL*Plus?还是别的什么?SQL语言无法告诉前端要使用多少个字符来显示列名。是的,我将4改为1,结果有所不同。我正在使用oracle sql plus与您的显示问题没有直接关系,但似乎
startdate
enddate
是日期,您正在提取月份。如果是这样,那么您依赖于隐式日期转换和关于日期格式掩码的假设;对于你现在所做的事情来说,这可能是一个可以接受的风险。一般来说,选择to_char(startdate,'MON')milestone…会更安全,以避免歧义,并使您的操作更清晰。这不会改变SQL*Plus显示结果的方式。它只是要改变在列标题中使用大写还是小写字符。