有没有更好的方法将 sql 中的 REGEXP 写入 select 唯一交易号 R-0001 和 R-AD-0001

Is there a better way to write REGEXP in sql to select unique transaction number R-0001 and R-AD-0001

我的数据库中存储了很多交易编号,example I-0001, IN-0001, N-0001, S-0001, SN-0001, R-0001 , R-AD-0001, and R-AA-00001. 每次插入新行时,我都会 select 最大交易编号和 + 1 以跟踪每个交易编号。
这是我最初的 SQL SELECT MAX(`transaction_invoice`) FROM sw_invoice WHERE `transaction_invoice` LIKE '%N-%',但我发现使用 LIKE 到 select 例如最大数量 N-,LIKE SQL 将也 select N-0001 和 SN-0001 在一起 Example of LIKE SQL result
为了解决这个问题,我发现 REGEXP 可能会解决我的问题,这里是示例 SQL SELECT * FROM `sw_invoice` WHERE `transaction_invoice` REGEXP '^N-',这个SQL在select最大N-个数时效果很好,但是当它到达selectR-0001时,它也会selectR- AD-0001 和以 R- 开头的 R-AA-00001 Example of REGEXP SQL result

有什么办法 SQL 只能 select 我需要的最大交易数量吗?例如,如果我 select 交易编号以 R- 开头,它只是 return R- 的最大数量,而不是 R-AD-

只需删除 like:

中的前导通配符
SELECT MAX(`transaction_invoice`)
FROM sw_invoice
WHERE `transaction_invoice` LIKE 'N-%';

为此您不需要正则表达式。

如果你需要在第一部分处理连字符,那么你需要正则表达式:

where transaction_invoice regexp '^N-[0-9]+$'