mysql - 如何获取 varchar 列的最大值并自动递增它

标签 mysql sql database

我想要获取 varchar 列的最大值,该列必须是唯一的,这就是为什么我想要获取最大值并递增它。

例如,我从 tbl_check 得到了这种情况:

+---------------+
|  check_up_id  |
-----------------
|      1-0      |
|      1-2      |
|      11-1     |
|      111-3    |
|      12-4     |
|      52-5     |
|      1-6      |
|      1-7      |
|      3-9      |
|      3-8      |
|      3-11     |
|      3-10     |
+---------------+

在我的 check_up_id 中,我认为我已经增加了我的 id 的右侧(1 - **),但这是不按顺序的。现在我不想要的是如何查询以获得右侧的最大值。仅考虑右侧,在这种情况下,有时左侧有 3 位数字或 2 位数字,有时只有一位数字。我想要的是返回右侧的最大值。在我的示例中,我想返回查询中的 3-11。忽略增量,因为我将在 php 端执行此操作。我想要的是返回 ( - ) 之后右侧的最大值

最佳答案

用途:

SELECT MAX(CAST(SUBSTRING_INDEX(check_up_id, '-', -1) AS DECIMAL))
FROM tbl_check

SUBSTRING_INDEX 返回包含由 - 字符分隔的指定数量字段的列的子字符串。负计数意味着从右侧开始计数,因此返回最右侧的字段。

要获取包含此内容的整个字段,请在 JOIN 中使用它:

SELECT check_up_id
FROM tbl_check
JOIN (
    SELECT MAX(CAST(SUBSTRING_INDEX(check_up_id, '-', -1) AS DECIMAL)) as max_right
    FROM tbl_check) AS x
ON SUBSTRING_INDEX(check_up_id, '-', -1) = max_right

关于mysql - 如何获取 varchar 列的最大值并自动递增它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44770730/

相关文章:

mysql - Radipanel SQL 查询错误的违规行为

MySQL Group by a field based on another field maximum value of another field IN THE GROUP(不在表中)

c# - 将一个表的所有行复制到另一个表

sql - ORACLE - 过程中出现错误 PLS-00103

c++ - 删除行后如何重新索引或修复rowid?sqlite?

database - QuickBooks Enterprise - 它在后台使用什么数据库?

php - 在另一个文件中携带 $id 变量

MYSQL根据JOIN中的ID选择最新结果以防止重复

c# - 系统.Data.SqlClient.SqlException : Column name or number of supplied values does not match table definition

sql - 替换 SQL 结果中的字符