【问题标题】:SUBSTRING_INDEX Not Warking in MysqlSUBSTRING_INDEX 在 Mysql 中不起作用
【发布时间】:2023-01-17 06:13:01
【问题描述】:

我正在尝试查找最大发票:

SELECT IFNULL(MAX(SUBSTRING_INDEX(invoice,'I', -1)) + 1, 1) AS invoice
FROM sales

SQL Fiddle

当我运行这个 SQL 查询时,它不能计数超过 10。

invoice
20221026P1I1
20221026P1I2
20221026P1I3
20221026P1I4
20221026P1I5
20221026P1I6
20221026P1I7
20221026P1I8
20221026P1I9
20221026P1I10
20221026P1I11
20221026P1I12

我正在尝试查找最大发票 12 + 1 = 13

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您对 SUBSTRING_INDEX() 的使用是正确的,但是您应该将字符串值转换为真正的整数:

    SELECT COALESCE(MAX(CAST(SUBSTRING_INDEX(invoice, 'I', -1) AS UNSIGNED)), 1) AS invoice
    FROM sales;
    

    试图找到文本子串本身的最大值的问题是文本数字按字典顺序排序,例如

    1
    10
    11
    2
    23
    

    但这不是您想要的行为,您想要的是数字最大值。因此我们应该转换这些子字符串然后进行比较。

    旁注:您可以通过维护纯数字发票编号列来完全避免此问题。您可能希望更改表设计以包含这样一列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多