【发布时间】:2020-07-10 07:16:14
【问题描述】:
我使用的是 Firebird 2.1。
我的工作订单号可能有 1 或 2 个字母字符,然后是 4 或 5 个数字,然后可能是带有 1 个字母字符和 2 个数字的前缀。
我想提取中间的 4-5 位数字。
我尝试了以下方法来查找数字字符,但它返回 0:
POSITION('%[0-9]%',JOBHEADER.ORDERNUMBER,1) AS "FIRST NUMBER"
我不确定是否可以在POSITION 函数中使用通配符。我想我可以尝试检查数字的第二个或第三个字符,但我真的需要通配符功能,然后在找到第一个数字的位置后找到下一个字母。或者也许有另一种解决方案来提取数字。
我发现了类似的东西:
CASE WHEN SUBSTRING(ordernumber FROM 2 FOR 5) SIMILAR TO '[0-9]+'
THEN SUBSTRING(ordernumber FROM 2 FOR 5)
ELSE SUBSTRING(ordernumber FROM 3 FOR 5)
END as PROJECTNUMBER
但是数字可能从前 5 个字符开始,然后 if/case 语句开始变得非常大。
【问题讨论】:
-
then maybe a prefix with 1 alpha character- “then” 表示“之后”,前缀是 before 主要值,而不是之后。之后的那些通常作为 POSTfixes。所以,请给出示例输入和输出数据。 // 就个人而言,为了解析,我会写一个存储过程
标签: sql firebird text-parsing firebird2.1