用空值替换空字符串
我正在通过计数将一个巨大的表卷起来到一个新表中,我想将所有空字符串更改为NULL,并且还要对一些列进行类型转换.我阅读了一些帖子,我找不到一个查询,这可以让我在单个查询中的所有列中进行查询,而不使用多个语句.
让我知道是否可以遍历所有列并使用null替换空字符串的单元格. 参考:How to convert empty spaces into null values,using SQL Server? 解决方法
据我所知,没有内置函数可以替换表中所有列的空字符串.你可以写一个
plpgsql function来照顾它.
以下函数用NULL替换给定表的所有基本字符类型列中的空字符串.如果剩余的字符串是有效的数字文字,则可以转换为整数. CREATE OR REPLACE FUNCTION f_empty2null(_tbl regclass,OUT updated_rows int) AS $func$ DECLARE -- basic char types,possibly extend with citext,domains or custom types: _typ CONSTANT regtype[] := '{text,bpchar,varchar,"char"}'; _sql text; BEGIN SELECT INTO _sql -- build command format('UPDATE %s SET %s WHERE %s',_tbl,string_agg(format($$%1$s = NULLIF(%1$s,'')$$,col),','),string_agg(col || $$= ''$$,' OR ')) FROM ( SELECT quote_ident(attname) AS col FROM pg_attribute WHERE attrelid = _tbl -- valid,visible,legal table name AND attnum >= 1 -- exclude tableoid & friends AND NOT attisdropped -- exclude dropped columns AND NOT attnotnull -- exclude columns defined NOT NULL! AND atttypid = ANY(_typ) -- only character types ORDER BY attnum ) sub; -- Test -- RAISE NOTICE '%',_sql; -- Execute IF _sql IS NULL THEN updated_rows := 0; -- nothing to update ELSE EXECUTE _sql; GET DIAGNOSTICS updated_rows = ROW_COUNT; -- Report number of affected rows END IF; END $func$ LANGUAGE plpgsql; 呼叫: SELECT f_empty2null('mytable'); SELECT f_empty2null('myschema.mytable'); 要获取列名称updated_rows: SELECT * FROM f_empty2null('mytable'); SQL Fiddle. 主要观点 >表名必须有效且可见,并且主叫用户必须具有所有必要的权限.如果不满足这些条件中的任何一个,则该功能将不起作用 – 即也没有任何东西可以被破坏.我投入到object identifier type (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Bottled Water: 实时集成postgresql与kafka
- swift – requestAccessForMediaType不要求权限
- c – 无跳跃编程
- ruby-on-rails – Facebook Omniauth Carrierwave简介图片
- 为什么C中的未初始化变量仍会产生输出
- C语言#line、#error和#pragma命令,以及_pragma运算符
- ruby-on-rails – Rails ActionMailer忽略environment.rb中
- 《Javascript权威指南》学习笔记之十一:处理字符串---Stri
- ruby-on-rails-3 – 单个控制器,多个(继承)类(rails 3)
- 转载 正则表达式后的参数含义