我的问题如下:
我有一个书目数据库,它始于1995年左右,经过多次转换成不同的格式,最新的是PSQL。由于我的前辈自动转换和输入数据的风格不同,我有很多旧的注意技术,现在不仅已经过时,而且污染了数据库。
E.g。人们习惯于将空信息记为“ - ”(连字符),而不是将其留空,这现在成为一个问题,因为我有很多条目,字幕被记录为“ - ”。
问题:对于此数据库中的每条记录,我想删除所有表格中只包含一个连字符的所有字符串(作者,期刊文章,书籍专着......)和列(性别,副标题,补充......)。像“伪名称 - 早年”这样的字符串不应该改变。 记录应该像这样改变:
作者:“Altmann” - > “Altmann”,标题:“伪标题” - > “伪标题”,副标题:“ - ” - > “”
我该怎么做?
提前致谢,
Telefonmann
答案 0 :(得分:1)
尝试使用函数来隐藏所有表,并对模式中的每个表重复查询:
CREATE OR REPLACE FUNCTION update_tables(schema IN VARCHAR) RETURNS void AS $$
DECLARE statements
CURSOR FOR SELECT schemaname, tablename FROM pg_tables WHERE schemaname = schema;
BEGIN FOR stmt IN statements LOOP EXECUTE 'UPDATE TABLE ' || quote_ident(stmt.schemaname) || '.' || quote_ident(stmt.tablename) || ' [put your query conditions here];';
END LOOP;
END; $$ LANGUAGE plpgsql;
答案 1 :(得分:0)
请参阅String Functions and Operators
其中一个变种:
UPDATE you_name_table SET Subtitle = '' WHERE trim(both ' ' from Subtitle) = '-';