如何在 - 分隔符之间提取发票号

How to extract invoice number between - deliminiters

发票号可以在开头包含1个或负号,在结尾包含1个或多个-n版本号。 如何提取发票号码的主要部分? 为此,前导 - 字符应被剥离,尾随 -n 变体也应被剥离。

例如

 1002546556
 -1002546556
 ---1002546556
 1002546556-1-K
 -1002546556-2
 --1002546556-2-3

对于所有这些数字,结果应该是

1002546556

我试过了

select regexp_replace(invoicenumber, '-.*', '', 'g') from invoice

但如果发票编号以 - 开头,则它 returns 为空值。

正在使用

PostgreSQL 9.3.5,由 Visual C++ build 1600 编译,64 位

真的不需要正则表达式。例如:
select split_part(ltrim(invoicenumber,'-'),'-',1)

您可以使用 regexp_match():

select (regexp_match('1002546556-1-K', '[0-9]+'))[1]

此returns字符串中的第一串数字

Here 是一个 db<>fiddle.