在MySQL中,从varchar列获取的最大值不超过999

在MySQL中,从varchar列获取的最大值不超过999,mysql,sql,Mysql,Sql,我在MySQL表中有一个VARCHAR列,它只存储数字。当我从mytable中运行querySELECT MAX(title_no)作为title_no时,我得到了999条,但在title_no列中,表中有更多的记录的值>999 SELECT MAX(title_no) as title_no from mytable 我不允许将列从varchar更改为int。请帮助我获取正确的数字 谢谢 .试试下面的另一种方法 SELECT MAX(CAST(title_no AS SIGNED)) AS

我在MySQL表中有一个VARCHAR列,它只存储数字。当我从mytable中运行querySELECT MAX(title_no)作为title_no时,我得到了999条,但在title_no列中,表中有更多的记录的值>999

SELECT MAX(title_no) as title_no from mytable 我不允许将列从varchar更改为int。请帮助我获取正确的数字

谢谢

.

试试下面的另一种方法

SELECT  MAX(CAST(title_no AS SIGNED)) AS title_no FROM  mytable;

您需要将其转换为数字类型,否则它将被排序为字符串,而不是数字:

SELECT  MAX(CAST(title_no AS SIGNED)) 
AS title_no 
FROM  mytable;

您需要在此处使用
CAST
。因为它被视为字符串而不是数字。因为您声明为
varchar

MAX(CAST(title_no AS SIGNED))

你可以用这个-

SELECT MAX(title_no * 1) AS title_no FROM mytable 

这是因为它将是字符比较,因为您的字段是varchar类型。您需要将其转换为整数。查看此

如果它只存储数字-它应该是
INT
类型'999'>'1111'-这正是字典排序的工作方式。Pl查看您的sql语法,第二个和第三个查询也不会给出正确的结果。是的,它看起来像一个骗局;但这是一种MySQL铸造行为。从文档中可以看出,要将字符串转换为数值上下文中的数值,通常只需将字符串值当作数字使用即可。请参阅此处的更多信息-。
SELECT  MAX(CAST(title_no AS SIGNED)) 
AS title_no 
FROM  mytable;
MAX(CAST(title_no AS SIGNED))
SELECT MAX(title_no * 1) AS title_no FROM mytable