我正在尝试在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);
我收到的错误是:
专栏。 。 。是整数类型,但表达式是文本类型。 。 。 提示:您需要重写或转换表达式
答案 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'是数字(或字符串)。
您的示例0440
对integer
值没有意义,因为不存储前导(无效)0
。
严格来说,数据类型integer
无法存储"尾随2个数字" - 意为数字 - 因为00
和0
都会产生相同的整数值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