如何在 - 分隔符之间提取发票号
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.
发票号可以在开头包含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.