首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当`Projections.max是字符串时,registrationNo (“registrationNo”)‘将如何工作

当`Projections.max是字符串时,registrationNo (“registrationNo”)‘将如何工作
EN

Stack Overflow用户
提问于 2015-11-24 12:27:40
回答 1查看 81关注 0票数 1

我有一个名为StudentDetails.In的实体,其中有一个类型为String.My client的字段RegistrationNo,它遵循一个模式,如xxxxx-xxxx (编号为00000到10000)-(当前年份号).To Store RegistrationNo,在此模式中,我们宣布它是随着String.Every时间的加入而声明的,我们必须增加存储它的序列号。

在不知道它存储为字符串的情况下,我尝试使用Projections.max("registrationNo")获取最后一个数字,幸运地,它返回了最大值,当序列号达到6位时,如xxxxxx xxxx,则Projections.max("registrationNo")没有返回6位数字,number.It只返回5位数字的最大值。

如何投影返回5位数的最大值,而不是6位数的

顺便说一下,我解决了这个问题,用记录的id来知道上一次RegistrationNo.But Projections.max("registrationNo")是如何工作的,这让我困惑了一段时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-24 12:57:02

正如注释中已经指出的,问题很可能是字符串比较,即对string类型的属性调用max()将导致返回“最大值”字符串值,即使这些字符串表示数字。

字符串比较通常通过从开始到结束对字符进行比较,直到出现差异或到达一个输入字符串的末尾(在这种情况下,较长的字符串将是更大的字符串)。

因此,只要您的序列号具有相同的长度,它就应该工作,因为比较1000000001将导致比较“正确”字符。

但是,一旦字符串长度不同,正常的字符串比较就不再起作用了,因为字符表示不同的数字。因此,将98765123456进行比较将导致98765更大,因为要比较的第一个字符几乎一直都是191 < 9 (除非您以某种方式改变了这一点)。

要解决这个问题,您可以选择几条取决于您的环境和目标的路线:

  • 将序列号存储在单独的数字属性中。
  • 使序列字符串从一开始就更长,即允许更大的范围
  • 在代码或数据库中添加一个专门的比较器(作为提示,我必须查找如何做到这一点)

从性能的角度来看,我可能会选择第一条路线。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33893747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档