如何修剪PostgreSQL数据库中所有表中每列的尾随空格

时间:2014-09-12 08:23:04

标签: sql postgresql dynamic-sql


     我在这项任务中遇到了困难,我需要修剪所有中所有的所有尾随空格 >在我的PostgreSQL Database


我已经

update tbl_sale set product=trim(product) where product LIKE '% '

这将{em} TRIM product 。{/ p>


在我的数据库 137表中,那么我的中的tbl_sale所有是可能的吗?数据库如果它有尾随空格

1 个答案:

答案 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()