我想从我的发票表中检索最大发票编号,当我选择所有可以清楚地看到最大发票编号为“10”的记录时,它会返回以下内容。
select * from invoice
但是当我查询
时select MAX(invoice_number) as maxinv from invoice
它返回“9”。那是为什么?
答案 0 :(得分:5)
如果您的invoice_number
存储为文本列,则会出现这种情况,例如varchar(10)
。在这种情况下,根据字母顺序,9将是最大值。
理想情况下,您应该将要执行数值运算的值存储为数值数据类型,例如int
。但是,如果由于某种原因您无法更改列数据类型,则可以在应用MAX
之前尝试强制转换列,如下所示:
select max (convert(invoice_number, signed integer)) as maxinv from invoice
注意:我特别提到了您要执行数字操作的"值" ,因为有些情况下输入文本是完全数字的,例如电话号码或信用卡卡号,但不存在您想要添加2个电话号码或采用信用卡号码的平方根的情况。这些值应存储为文本。
答案 1 :(得分:3)
这是因为您的专栏是VARCHAR
,请尝试将其投放到UNSIGNED
:
select MAX(CAST(invoice_number AS UNSIGNED)) as maxinv from invoice
正如Joshi注意到的,如果你有负值,你可以使用SIGNED
select MAX(CAST(invoice_number AS SIGNED)) as maxinv from invoice
答案 2 :(得分:1)
这是一个伪代码,试着看看它。
SELECT MAX(CAST(invoice_number AS SIGNED)) from invoice
。