让我知道是否可以遍历所有列并使用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 regclass
以确保它.
表名可以按原样提供(‘mytable’),然后search_path
决定.或者模式限定选择某个模式(‘myschema.mytable’).
>查询系统目录以获取表的所有(character-type)列.提供的函数使用这些基本的character types:text,“char”.仅处理相关列.
>使用quote_ident()
或format()清理列名称和safeguard against SQLi.
>更新后的版本使用基本的sql聚合函数string_agg()来构建不带循环的命令字符串,这样更简单,更快捷.而且更优雅. 总结
以上是内存溢出为你收集整理的用空值替换空字符串全部内容,希望文章能够帮你解决用空值替换空字符串所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)