[英]CONCAT() using a date variable, which is converted into a character using to_char, and two other string variables
這是我第一次使用 SQL Developer。 我想創建一個字符串變量,其中包含字符串todate2
、 portfolio
和node_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.