postgres:将 '' 转换为 NULL

Min*_*Mai 2 postgresql

我正在尝试运行此查询来更改我的纬度坐标,该坐标以文本形式保存为双精度

ALTER TABLE mapdata ALTER COLUMN lat TYPE double precision USING (lat::double precision);
Run Code Online (Sandbox Code Playgroud)

但是,我不断收到此错误: invalid input syntax for type double precision: ""

我的假设是有一个空白条目并且 postgres 不知道将它视为双精度。我如何将其确定为 aNULL或者是否有另一种方法可以将我的lat专栏变成 a double precision?谢谢!

Sam*_*nen 5

您有两个选择:

  1. 您将原始数据中的空字符串更改为 NULL,然后更改类型
  2. 您在更改类型时处理它们

第一个将是一个简单的

UPDATE table SET col=NULL where col='';
Run Code Online (Sandbox Code Playgroud)

但这自然需要时间并且有点不必要,因为之后您要更改类型。

第二种方法是在转换时处理空字符串

ALTER TABLE mapdata
  ALTER COLUMN lat TYPE double precision
    USING (NULLIF(lat, '')::double precision);
Run Code Online (Sandbox Code Playgroud)

NULLIF将返回NULL如果LAT栏为空字符串,否则它会返回纬度列的值。这将比首先更改源数据更有效。