具有整数字段的UPDATE语句中的右侧函数

时间:2017-10-10 20:58:48

标签: postgresql postgresql-9.6

我正在尝试在UPDATE字段上运行一个简单的integer脚本,其中尾随的2个数字是"保留",并且删除了前导数字。例如," 0440"将更新为" 40。"我可以在SELECT语句中获取所需的数据,例如

SELECT RIGHT(field_name::varchar, 2) 
FROM table_name;

但是,当我尝试在UPDATE脚本中使用相同的功能时遇到错误,例如:

UPDATE schema_name.table_name 
SET field_name = RIGHT(field_name::varchar, 2);

我收到的错误是:

  

专栏。 。 。是整数类型,但表达式是文本类型。 。 。   提示:您需要重写或转换表达式

3 个答案:

答案 0 :(得分:0)

您将整数转换为varchar,但您并未将结果转换回整数。

UPDATE schema_name.table_name 
SET field_name = RIGHT(field_name::TEXT, 2)::INTEGER;

答案 1 :(得分:0)

错误非常简单 - right返回文本数据,您无法将其分配给整数列。但是,您可以明确地将其转回:

UPDATE schema_name.table_name 
SET    field_name = RIGHT(field_name::varchar, 2)::int;

答案 2 :(得分:0)

1数字(或数字 - 或字符串),' 123'是数字(或字符串)。

您的示例0440integer值没有意义,因为不存储前导(无效)0

严格来说,数据类型integer无法存储"尾随2个数字" - 意为数字 - 因为000都会产生相同的整数值0。但我不认为这就是你的意思。

要对数值进行操作,请不要使用字符串函数(需要来回转换。modulo operator %完全符合您的要求:field_name%100。所以:

UPDATE schema_name.table_name 
SET    field_name = field_name%100
WHERE  field_name > 99;  -- to avoid empty updates