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

标签 sql postgresql dynamic-sql


我在这项任务中遇到困难,我需要修剪所有的每个的所有尾随空格> 在我的 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/

相关文章:

mysql : Get comma delimited Output

SQL:这个 SQL 查询有什么问题

oracle - 我们能否找到哪个表导致ORA-00942表或 View 不存在。 :

sql - 存储库模式困境 : Redundant Queries vs. 数据库往返

mysql - SQL计数和求和问题

sql - "to_char()"在 PostgreSQL 中是否比 "BETWEEN"使用更多的 CPU

postgresql - postgresql 中 oracle 序列的 NO ORDER 的等价物是什么?

postgresql - 窗口函数 LAG 可以引用正在计算其值的列吗?

sql - 如何执行作为 sp 参数传递的 sql 文本?

sql-server-2012 - SQL Server 2012 : get number of occurrences and calculate duration with Dynamic SQL