【问题标题】:format column headers during concat,oracle在 concat、oracle 期间格式化列标题
【发布时间】:2013-11-15 13:15:07
【问题描述】:

我需要在使用 concat 时在 sql 的输出中格式化列标题 例如:

SELECT '' || to_char(sysdate,'ddmmyyyy') as DATE || ',' || ENO|| ',' || NAME|| ''  
FROM EMP;

会找回我

ORA-00923:在预期的地方找不到 FROM 关键字。

需要输出为:

DATE   ENO   NAME
-----------------
251013 7560  RAM
251013 7561  ROSS

这种格式有效

SELECT to_char(sysdate,'ddmmyyyy') || ',' || ENO || ',' || NAME as "DATE,ENO,NAME" 
FROM EMP

但我有一个问题

ORA-00972: 标识符太长

当“”内的列名长度超过30个字符时

例如:

SELECT to_char(sysdate,'ddmmyyyy') || ',' || ENO || ',' || NAME ||
       ',' || EMPLOYEE_IDENTIFICATION_NUMBER as "DATE,ENO,NAME,EMPLOYEE_IDENTIFICATION_NUMBER" 
FROM EMP;

【问题讨论】:

  • Oracle 中标识符的最大长度为 30 个字符,因此列的别名不能超过 30 个字符,这就是您收到此错误的原因。
  • 不是单列名超过30个字符
  • 因此,尝试找出是否有办法避免 ORA-00972,同时使用 concat 在别名中有多个列名
  • 您有一个超过 30 个字符的名称,即别名。 别名是标识符,就像列名一样。在这里,您只有一个包含表中列名称的字符串,而这个“字符串”是一个标识符,是您连接列的别名。无法指定更长的别名。
  • 无法指定更长的别名。但是,您可以使用标题从DUAL 中的单行创建UNION,按一些额外添加的列排序,您将拥有您需要的东西(或多或少)。我猜你正在将结果保存到文件中?在这种方法中,标题实际上是一行,但它的值将是您想要的标题字符串。

标签: sql oracle formatting


【解决方案1】:

要实现此输出,您必须像这样构建查询 SELECT to_char(sysdate,'ddmmyyyy') || ',' || ENO || ',' || NAME as "DATE,ENO,NAME" FROM EMP

【讨论】:

  • 此格式有效 SELECT to_char(sysdate,'ddmmyyyy') || ',' ||伊诺 || ',' || NAME 来自 EMP,但我遇到了 ORA-00972 的问题:当“”中的列名长度超过 30 个字符时,标识符太长 例如:SELECT to_char(sysdate,'ddmmyyyy') | | ',' ||伊诺 || ',' ||姓名 || ',' || EMPLOYEE_IDENTIFICATION_NUMBER 作为“DATE,ENO,NAME,EMPLOYEE_IDENTIFICATION_NUMBER”来自 EMP;引发 ORA-00972: 标识符太长
【解决方案2】:

如果确实需要,您需要将别名移到SELECT 子句的末尾。也可以删除空字符串(''):

SELECT to_char(sysdate,'ddmmyyyy') || ',' || ENO || ',' || NAME as DATE FROM EMP;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 2015-08-24
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    相关资源
    最近更新 更多