mysql - 比较MySQL中格式化字符串中的数字?

标签 mysql sql

我的 MySQL 表中有一个 PolicyNo 列,其格式如下:

XXXX-000000

四个大写字符,后跟一个破折号和一个六位数字

六位数字是递增的,为下一行添加1,并且所有行的四个字符始终相同。 PolicyNo 列是唯一的,类型为 varchar(11)

如果订购,它将如下所示:

XXXX-000001
XXXX-000002
XXXX-000003
...

现在我想获取所有编号大于指定编号的PolicyNo

例如:检索所有大于'XXXX-000100'PolicyNo:

XXXX-000101
XXXX-000102
XXXX-000103
...

我测试了这个查询,它工作正常,但我只是不知道这样做是否真的安全:

SELECT  'XXXX-000099' > 'XXXX-000098'
    ,   'XXXX-000099' > 'XXXX-000100'
    ,   'XXXX-000099' > 'XXXX-000101'

Result:
+-------------------------------+-------------------------------+-------------------------------+
| 'XXXX-000099' > 'XXXX-000098' | 'XXXX-000099' > 'XXXX-000100' | 'XXXX-000099' > 'XXXX-000101' |
+-------------------------------+-------------------------------+-------------------------------+
|                             1 |                             0 |                             0 |
+-------------------------------+-------------------------------+-------------------------------+

还有其他方法可以做到这一点吗?或者已经可以使用它了吗?

最佳答案

因为你的数字是零填充的,只要四个字母前缀相同并且总是相同的长度,那么这应该可以工作,因为MySQL将进行字典顺序比较。

请注意,填充中少一个 0 将导致此失败:

SET @policy1 = 'XXXX-00099';
SET @policy2 = 'XXXX-000598';
SELECT @policy1, @policy2, @policy1 > @policy2 AS comparison;
=========================================
> 'XXXX-00099', 'XXXX-000598', 1

如果你需要真正比较最后的数字,你需要解析它们并转换它们:

SET @policy1 = 'XXXX-00099';
SET @policy2 = 'XXXX-000598';
SELECT @policy1, @policy2, 
   CONVERT(SUBSTRING(@policy2, INSTR(@policy2, '-')+1), UNSIGNED) >
   CONVERT(SUBSTRING(@policy2, INSTR(@policy2, '-')+1), UNSIGNED) AS comparison;
=========================================
> 'XXXX-00099', 'XXXX-000598', 0

关于mysql - 比较MySQL中格式化字符串中的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13281693/

相关文章:

MySQL - 基本的 2 表查询速度慢 - 索引在哪里?

mysql - COUNT() 和 Left Join 不起作用

mysql - 计算从前一行值增加/减少的百分比

sql - 在导入到 SQL 表之前,如何从平面文件源在 SSIS 中添加 GUID 列?

c# - Azure SQL - 单个或多个数据库连接?

mysql - SQL:我可以在窗口函数中引用/访问当前行的数据吗?

mysql - CakePHP 中的 GROUP 和 COUNT() 多个字段

sql - plsql使用一个立即执行命令插入多行

sql - 创建没有外键的 LINQ 关联

sql - 如何比较 SQL 日期与 null