簡體   English   中英

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)

返回錯誤的代碼:

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”:無效標識符”。

如果您有一個復雜的計算或表達式,那么您可以使用子查詢(即內聯視圖或公用表表達式,也稱為子查詢分解)來定義別名,然后該別名可用於外部查詢。 這在這里似乎有點矯枉過正。

您的第二個查詢按原樣工作,但您可以按照@Littlefoot 的建議切換到連接運算符:

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

數據庫<>小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM