Codeigniter MySQL使用varchar类型值选择最大值

时间:2020-01-25 13:04:35

标签: php mysql sql codeigniter max

我想从我的codeigniter模型的以下varchar类型列中选择max auto_no

+------------+
|  auto_no   |
+------------+
| 2020-00821 |
| 2020-00822 |
| 2020-00823 |
| 2020-00824 |
| 2020-00825 |
+------------+ 

在此示例中,该值为825。我尝试了以下选项

public function generate_auto_no($count = 1, $start = 00000, $digits = 5)
    {
        $query = $this->db->get('letter_letter');
        $this->db->select("MAX(CAST(SUBSTRING_INDEX(auto_no, '-', -1) AS UNSIGNED)) AS auto_no", FALSE);        
        $count = ($query->num_rows() > 0) ? $query->row()->auto_no + 1 : 0;
        $result = array();
        for ($n = $start; $n <= $start + $count; $n++) {
            $result[] = str_pad($n, $digits, "0", STR_PAD_LEFT);
        }
        return date("Y").'-' . end($result);
    }

但是没有得到期望值。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

我想你可以选择最大字符串:

Dim v As Variant
v = "42"

If IsNumeric(v) Then
    If v + 0 <> Round(v + 0) Then
       MsgBox ("<>")
    End If
End If

答案 1 :(得分:0)

一种选择是使用自定义查询:

$this->db->query(" SELECT MAX( CAST( SUBSTR(auto_no,INSTR(auto_no,'-')+1,LENGTH(auto_no)) AS SIGNED) ) FROM tab ");

包括MySQL DB的著名字符串运算符。

答案 2 :(得分:0)

可以通过使用MAX()作为varchar值然后提取最后5个字符的数量来检索naximum值:

select right(max(in_num), 5) + 0
from tablename

请参见demo
结果:

825
相关问题