[英]Codeigniter MySQL select max using varchar type value
我想從我的 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);
}
但是沒有得到預期的值。 任何人都可以幫忙嗎?
我認為你可以只選擇最大字符串:
$this->db->select_max("auto_no");
$query = $this->db->get('letter_letter');
if ($query->num_rows() > 0) {
$last_auto_no = $query->row()->auto_no;
$no = intval(explode('-', $last_auto_no)[1]) + 1;
$auto_no = date("Y").'-' . str_pad($no, $digits, "0", STR_PAD_LEFT);
} else {
$auto_no = (date("Y").'-' . str_pad(0, $digits, "0", STR_PAD_LEFT));
}
return $auto_no
一種選擇是使用自定義查詢:
$this->db->query(" SELECT MAX( CAST( SUBSTR(auto_no,INSTR(auto_no,'-')+1,LENGTH(auto_no)) AS SIGNED) ) FROM tab ");
包括眾所周知的 MySQL DB 字符串運算符。
可以通過對varchar
值使用MAX()
來檢索MAX()
,然后提取最后 5 個字符的數量:
select right(max(in_num), 5) + 0
from tablename
請參閱演示。
結果:
825
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.