比较MySQL中格式化字符串中的数字?
我在MySQL的表中有一个比较MySQL中格式化字符串中的数字?,mysql,sql,Mysql,Sql,我在MySQL的表中有一个PolicyNo列,格式如下: XXXX-000000 XXXX-000001 XXXX-000002 XXXX-000003 ... 四个大写字母字符,后跟一个破折号和一个六位数字 六位数字是递增的,为下一行添加1,并且所有行的四个字符的长度始终相同。PolicyNo列是唯一的,其类型为varchar(11) 如果订购,它将如下所示: XXXX-000000 XXXX-000001 XXXX-000002 XXXX-000003 ... 现在我想获取所有的Po
PolicyNo
列,格式如下:
XXXX-000000
XXXX-000001
XXXX-000002
XXXX-000003
...
四个大写字母字符,后跟一个破折号和一个六位数字
六位数字是递增的,为下一行添加1
,并且所有行的四个字符的长度始终相同。PolicyNo
列是唯一的,其类型为varchar(11)
如果订购,它将如下所示:
XXXX-000000
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提供的子字符串函数,如下面的查询 从表1中选择count(*),其中子字符串(policyNo,6)>您的_范围强> 这里6作为从第6位开始的6位数字传递,如果您确实想传递初始4位字符,那么您可以使用以下查询。此处第二个where条款将从保单编号中提取最初的4个字母
从表1中选择count(*),其中子字符串(policyNo,6)>您的_范围和子字符串(policyNo,1,4)=‘ABCD’因为您的数字是零填充的,只要四个字母的前缀相同且长度始终相同,那么这应该可以像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