我在这项任务中遇到了困难,我需要修剪所有表中所有列的所有尾随空格 >在我的PostgreSQL Database
。
我已经
update tbl_sale set product=trim(product) where product LIKE '% '
这将{em} TRIM
product
列。{/ p>
在我的数据库 137表中,那么我的中的tbl_sale
所有列是可能的吗?数据库如果它有尾随空格?
答案 0 :(得分:6)
关注查询将返回所有表及其列,这些 可能有尾随空格。<登记/>
注意:我假设您的所有表的名称都以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 '% '
来更新所有表中的所有列。
最后,
使用此方法更新具有尾随空格的database
中的所有列。
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()