我需要在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);