postgrehandle SQL 特殊字符



我需要在PostGIS 2.2中选择以下值表:

内恩威特性格变化 (10(

1",
100,
110,
125,
150,
200,
250, 
...

这些值类型是 varchar,但我不想选择它们作为数值,所以我尝试了

SELECT DISTINCT
CASE
WHEN lei.nennweite = '1"' THEN 25.4
ELSE CAST(lei.nennweite AS numeric)
END as d2
FROM public."WAS_LEITUNG" lei, qwat_vl.pipe_material vl_pipe_mat
WHERE lei.material = 1 AND vl_pipe_mat.value_fr = 'Fonte' 
GROUP BY d2, vl_pipe_mat.id
ORDER BY d2

我收到以下错误

错误:数字类型"« » 的输入语法无效

我尝试了很多方法来处理" " ',例如使用反斜杠,双引号,转义,但我没有设法解决我的问题。

如果输入不是数字,则转换为数字将失败。您可以确保输入有效并处理无效的 2 种情况,也可以使用在输入无法转换为数字时返回 NULL 的函数。

错误消息确实提到了创建问题的条目类型,在本例中为空格。您可以通过将其替换为 NULL(或您认为合适的任何值(来处理它

CASE
  WHEN lei.nennweite = '1"' THEN 25.4
  WHEN lei.nennweite = ' ' THEN NULL
  ELSE CAST(lei.nennweite AS numeric)
END as d2

或使用 isnumeric(( 函数:

 CASE
      WHEN lei.nennweite = '1"' THEN 25.4
      WHEN isnumeric(lei.nennweite) THEN CAST(lei.nennweite AS numeric)
      ELSE NULL
 END as d2

附带说明一下,您可能需要查找 " ,如果找到,请将其从输入中删除,然后读取数字,最后将其乘以 25.4。它将确保处理 2" 或 1.5" 等输入。

您可能想尝试to_number(string, formatStr)而不是cast。

SELECT to_number(x, '9999999')
FROM ( VALUES
  ( '1"' ),
  ( '100' ),
  ( '110' ),
  ( '125' ),
  ( '150' ),
  ( '200' ),
  ( '250' )
) AS t(x);

最新更新