CONCAT() 使用日期变量,使用 to_char 将其转换为字符,以及另外两个字符串变量

CONCAT() using a date variable, which is converted into a character using to_char, and two other string variables

这是我第一次使用 SQL Developer。 我想创建一个字符串变量,其中包含字符串 todate2portfolionode_name 的组合值。但是,当我尝试在 concat 函数中包含 todate2 时,出现错误。 DATA_TYPE:to_date 是 DATE,portfolio 是 VARCHAR2(15 CHAR),node_name 是 VARCHAR2(15 CHAR)

returns错误的代码:

select to_char(to_date, 'ddmmyyyy') todate2, to_char(to_date, 'dd-mm-yyyy') todate, 
concat(concat(**todate2**,portfolio),node_name) as comb,
 portfolio, node_name,
 node_no, 
 sort
FROM table1
WHERE 1=1


ORDER BY 
  to_date asc,
  node_no asc
  ;  

或者,我试过:

select  to_char(to_date, 'dd-mm-yyyy') todate, 
concat(concat(**to_char(to_date, 'ddmmyyyy')**,portfolio),node_name) as comb,
 portfolio, node_name,
 node_no, 
 sort
FROM table1
WHERE 1=1


ORDER BY 
  to_date asc,
  node_no asc
  ;  

这是我第一次提出有关 SQL 的问题。如果我提供的信息不足,请随时询问更多信息。 提前谢谢你。

不要使用 CONCAT,它在 Oracle 中只接受两个参数。请改用双竖线 || 串联运算符:

select to_char(todate2, 'ddmmyyyy') || ' '|| portfolio ||' '|| node_name
from table1
where ...

在您的第一个查询中,您将 todate2 定义为列表达式的别名。不能在同级查询中使用别名,order by 子句除外;这是由于 SQL 的处理和评估顺序所致。因此该查询将出现错误“ORA-00904:“TODATE2”:无效标识符”。

如果您有复杂的计算或表达式,那么您可以使用子查询(即内联视图或常见的 table 表达式,也称为子查询分解)来定义别名,然后就是可用于外部查询。这似乎有点矫枉过正。

您的第二个查询按原样运行,但您可以按照@Littlefoot 的建议切换到连接运算符:

select  to_char(to_date, 'dd-mm-yyyy') todate, 
  to_char(to_date, 'ddmmyyyy') || portfolio || node_name as comb,
...

db<>fiddle