我在这项任务中遇到困难,我需要修剪所有表的每个列的所有尾随空格> 在我的 PostgreSQL 数据库
中。
我有
update tbl_sale set product=trim(product) where product LIKE '% '
这将TRIM
表 tbl_sale
中的产品
列。
在我的数据库 137 个表 那里,那么是否可以TRIM
我的所有列 数据库 是否有尾随空格?
最佳答案
以下查询 将返回所有表 及其列,它们可能有也可能没有尾随空格。< br/>
注意:我假设所有表都有 tbl_
前缀。
select
table_name,COLUMN_NAME
from
INFORMATION_SCHEMA.COLUMNS
where
table_name LIKE 'tbl_%' and (data_type='text' or data_type='character varying')
要获取所有表的UPDATE
查询,请使用以下选择
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 'tbl_%' and (data_type='text' or data_type='character varying')
) c
这将返回行,如update tbl_sale set product=trim(product) where product LIKE '% '
更新所有列 在所有表中。
最后,
使用此方法更新数据库
中具有尾随空格的所有列。
do $$
declare
selectrow record;
begin
for selectrow in
select
'UPDATE '||quote_ident(c.table_name)||' SET '||c.COLUMN_NAME||'=TRIM('||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 'tbl_%' and (data_type='text' or data_type='character varying' )
) c
loop
execute selectrow.script;
end loop;
end;
$$;
把上面的方法包装成一个Function
,这样以后使用起来更方便
create function rm_trail_spaces() returns void as
$$
declare
selectrow record;
begin
for selectrow in
select
'UPDATE '||quote_ident(c.table_name)||' SET '||quote_ident(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 'tbl_%' and (data_type='text' or data_type='character varying' )
) c
loop
execute selectrow.script;
end loop;
end;
$$
language plpgsql
用法:SELECT rm_trail_spaces()
关于sql - 如何修剪 PostgreSQL 数据库中所有表中每一列的尾随空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25803842/