2017-06-29 170 views
0

根据文档和此tutorial。我可以用;Postgres在“CAST”处或附近的语法错误

CAST (expression AS type);

我有存储为text一系列的值,这是货币价值(格式为200.00我想成为decimal所以我试图;

SELECT totalvalue 
CAST (table.totalvalue AS decimal(12,2)) 
FROM table; 

但这只是返回上一个错误语法

ERROR: syntax error at or near "CAST"

我试着调换TY从十进制到整数,但我得到同样的问题。

Postrgres 9.6.2

+0

请显示您的完整查询语句。目前,它看起来像你的查询只是'CAST ...',这是行不通的。这应该至少类似于'SELECT CAST(table.totalvalue AS decimal(12,2))FROM table;'作为你链接的教程解释。 – dhke

+0

已添加完整查询 –

+3

也许您在第一列('totalvalue')后忘记了逗号。尝试:'SELECT totalvalue, CAST(table.totalvalue AS decimal(12,2))FROM table;' –

回答

1

我想你是误会的CAST目的。调用CAST不会更改列的类型,但仅在SELECT时刻才会更改它的值。要改变它的类型,你必须以ALTER COLUMN结合CAST

--Changing type of column using cast operator :: 
ALTER TABLE d_voa_record1 
    ALTER COLUMN totalvalue TYPE NUMERIC(12,2) USING (totalvalue::NUMERIC(12,2)); 

--Changing type of column using cast function 
ALTER TABLE d_voa_record1 
    ALTER COLUMN totalvalue TYPE NUMERIC(12,2) 
     USING CAST(totalvalue AS NUMERIC(12,2)); 

--Just changing returned value of column 
SELECT CAST(totalvalue AS NUMERIC(12,2)) AS totalvalue_as_numeric, 
    totalvalue AS unchanged_totalvalue FROM d_voa_record1; 
0

删除totalvalueCAST(..)之前说,它应该工作:

SELECT 
    CAST (t1.totalvalue AS decimal(12,2)) 
FROM t1; 

我也希望你没有使用table为您的表的名称,因为它是SQL关键字。如果你这样做,那么总是双引号:

SELECT 
    CAST ("table".totalvalue AS decimal(12,2)) 
FROM "table"; 
相关问题