【发布时间】:2024-01-19 12:58:01
【问题描述】:
我有这个代码(已经在那里,不是我的):
SELECT
a.id_original_contrato AS contrato,
( CASE WHEN d.value~'^\\d+$' THEN d.value::integer ELSE 0 END ) AS monto,
EXTRACT(YEAR FROM b.value)::integer AS anoinicio,
EXTRACT(YEAR FROM c.value)::integer AS anofin
...等(一些 JOIN 和 WHERE)
让我解释一下:d.value 来自一个值为character varying (200) 的表。该代码稍后将在另一个表中插入d.value(现在称为“monto”)作为integer。有人编码该正则表达式以提取一些字符或在其他情况下(ELSE),将其定义为 0。这些值仅在 integer 时有效。如果我使用像 76.44 这样的 d.value,由于该正则表达式它不起作用,它总是将其定义为 0。
好吧,我必须更改该代码,因为:
- 我需要将新表中的 d.value 存储为
numeric,而不是integer(在我的新表中,数据类型现在是numeric) - 但首先,我需要更正那个正则表达式,因为它会弄乱我的数字,例如
76.44或66,56(点或逗号)。
我不确定那个正则表达式在做什么。以及如何使用更好或新的正则表达式来满足我的需求?
【问题讨论】:
-
伟大的头像! (来自游戏“李小龙”)
-
MOAAGH!谢谢!
标签: regex postgresql casting numeric