编辑 - 根据用户评论完成重写。 第一篇文章 - 试图做到这一点。
我希望在下面使用regex_replace而不是TRIM。
SELECT
'UPDATE '||quote_ident(c.table_name)||' SET '||c.COLUMN_NAME||'=TRIM('||quote_ident(c.COLUMN_NAME)||')
WHERE '||quote_ident(c.COLUMN_NAME)||' ILIKE ''% '' ' AS script
FROM (
SELECT
table_name,COLUMN_NAME
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
table_name LIKE 'my_%' AND (data_type='text' OR data_type='character varying')
) c;
生成此语句:
UPDATE my_table SET my_field=TRIM(my_field);
目标是生成以下声明:
UPDATE my_table SET my_field=regexp_replace(my_field, '\s+$', '');
但是我的尝试:
SELECT
'UPDATE '||quote_ident(c.table_name)||' SET '||c.COLUMN_NAME||'=regexp_replace('||quote_ident(c.COLUMN_NAME)||', '\s+$', '')
WHERE '||quote_ident(c.COLUMN_NAME)||' ILIKE ''% '' ' as script
FROM (
SELECT
table_name,COLUMN_NAME
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
table_name LIKE 'my_%' AND (data_type='text' OR data_type='character varying')
) c;
生成以下错误:
ERROR: syntax error at or near "\"
LINE 2: ...regexp_replace('||quote_ident(c.COLUMN_NAME)||', '\s+$', '')...
^
希望能够清楚地了解为什么这不起作用。谢谢。