我需要在PostGIS 2.2中选择以下值表:
nennweite字符变化(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
我收到以下错误
错误:数字类型的输入语法无效:«»
我尝试了许多方法来处理'''喜欢使用反斜杠,双引号,逃避,但我无法解决我的问题。
答案 0 :(得分:1)
如果输入不是数字,则转换为数字将失败。 您既可以确保输入有效,也可以处理未输入的情况,或者如果输入无法转换为数字,则可以use a function返回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"将被处理。
答案 1 :(得分:0)
你可能想尝试to_number(string, formatStr)
而不是演员。
SELECT to_number(x, '9999999')
FROM ( VALUES
( '1"' ),
( '100' ),
( '110' ),
( '125' ),
( '150' ),
( '200' ),
( '250' )
) AS t(x);