我正在为我的客户重建应用程序。我编写脚本将数据从旧数据库迁移到新数据库。为了防止列etiquette_start
中的空值(旧数据库中发生了什么),我运行
UPDATE items
SET etiquette_start = 'E'
WHERE trim(both ' ' from etiquette_start) = ''
OR etiquette_start is null;
导入数据后。问题是脚本在pgAdmin III上工作正常,但它不会在php脚本上执行。 PHP语法错误不是这里的问题 - 将其他查询放在上面引用的变量保持查询中导致成功的数据操作。页面和日志中没有PHP错误。
答案 0 :(得分:2)
试试这个:
UPDATE items
SET etiquette_start = 'E'
WHERE length(trim(both ' ' from etiquette_start)) = 0
OR etiquette_start is null;
答案 1 :(得分:0)
无论哪种方式,您都可以简化trim()
调用并阻止空更新:
UPDATE items
SET etiquette_start = 'E'
WHERE (trim(etiquette_start) = '' OR etiquette_start IS NULL) -- parens needed
AND etiquette_start IS DISTINCT FROM 'E';
由于空格(' '
)是trim()
要删除的默认字符,因此这些表达式是100%等效的:
trim(etiquette_start)
trim(both ' ' from etiquette_start