sql查詢語句報錯處理——ERROR: failed to find conversion function from unknown to text


今天遇到寫存儲過程遇到的一個小問題,在查詢語句中使用到了自定義的數當做列的值,然后想給這一列起一個別名 ,就直接在后面用了 as 別名。
執行存儲過程,存儲過程報錯,ERROR: failed to find conversion function from unknown to text 。意思是沒有找到一個將未知 轉換成text 的函數。

舉例說明:
在以下代碼中 ,我們需要用到臨時表update_中的三個字段來進行where條件的判斷,因為_p_year,_stat_date是存儲過程中輸入的參數 也包括'00000' ,都是要起別名當做where的條件判斷
但是類似這種,直接用的話會報上述錯誤。
所以需要加 ::text 轉換成文本類型 ::int 轉換成int類型

UPDATE employment_status e SET cgl=update_.cgl FROM
(SELECT
temp_.area_code as sfdm,
        '00000' as yxdm,
    _p_year as year,  --問題出現的地方
   _stat_date::text as stat_date,
(
(
temp_.rate - _v_avg_province_cgl_score
) / _v_stddev_province_cgl_score * 10 + 50
) / _v_cgl_rate as cgl
FROM
(
SELECT
inf_.area_code,
rate
FROM
(
SELECT
b.yxszsdm,
b.byqxdm,
1.0 * num / total AS rate
FROM
(
SELECT
yxszsdm,
COUNT (1) AS total
FROM
graduate_info gra,
school_info sch
WHERE
YEAR = _p_year
AND gra.yxdm = sch.code
AND sch.build_type_name NOT LIKE '科研機構'
GROUP BY
yxszsdm
AS A,
(
SELECT
yxszsdm,
byqxdm,
COUNT (1) AS num
FROM
graduate_info gra,
school_info sch
WHERE
YEAR = _p_year
AND gra.yxdm = sch.code
AND sch.build_type_name NOT LIKE '科研機構'
GROUP BY
yxszsdm,
byqxdm
AS b
WHERE
A .yxszsdm = b.yxszsdm
AND byqxdm ='80'
) gra_
RIGHT JOIN (
SELECT DISTINCT
u.area_code
FROM
user_info u,
school_info s
WHERE
u.org_code = s.code
AND s.build_type_name != '科研機構'
ORDER BY
area_code
) inf_ ON gra_.yxszsdm = inf_.area_code
) temp_ )update_
WHERE e.sfdm=update_.sfdm
AND e.yxdm=update_.yxdm 
AND e.stat_date=update_.stat_date
AND e.year=update_.year;



簡單例子:

Select * 
from (select 'string'  as Rowname, Data
      From table)
Union all
     (select 'string2' as Rowname, Data
      From table)


期望輸出:
Rowname Data
string 53
string2 87

這樣的話會報錯,需要我們加一個轉換函數 ::text 修改后

SELECT 'string'::text AS rowname, data FROM tbl1

UNION ALL
SELECT 'string2', data FROM tbl2












免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM