【发布时间】:2018-11-01 12:16:16
【问题描述】:
我正在更改已填满列的现有表。在我的表“部分”中,我想在“名称”列上设置字符限制,特别是输入 VARCHAR(60)。 但是,以前没有字符限制,我想截断名称列中的任何现有字段,以便它现在在我的 ALTER 脚本之前匹配此限制。
我仍然收到一些错误消息,包括在我的 LEFT 语句中,这是我用来截断“名称”列中的字符串的内容。 LEFT 语句让我如何声明要截断的字符串感到不安,无论我是否将参数放在括号中。这是我目前所处的位置:
DO $$
DECLARE
_name text;
_id uuid;
BEGIN
FOR _name, _id IN SELECT (name, id) FROM %SCHEMA%.section
LOOP
IF (_name > 60)
THEN
SET name = LEFT (_name, 60) WHERE id = _id;
END IF;
END LOOP;
RETURN NEW;
END $$;
完成此操作后,我知道我的 ALTER 脚本非常简单:
ALTER TABLE IF EXISTS %SCHEMA%.section ALTER COLUMN name TYPE VARCHAR(60);
【问题讨论】:
-
您是否尝试添加括号?像这样: LEFT(_name, 60)
-
是的,我曾提到在 LEFT 语句中添加括号。当我这样做时,我仍然收到“错误:在“(”“或附近的语法错误
标签: sql postgresql foreach truncate