CAST DECIMAL到INT

我正在尝试这样做:

SELECT CAST(columnName AS INT), moreColumns, etc FROM myTable WHERE ... 

我已经在这里看了帮助FAQ: http : //dev.mysql.com/doc/refman/5.0/en/cast-functions.html ,它说我可以像CAST(val AS TYPE) ,但它是不工作。

试图将小数转换为整数,实际值是223.00,我想要223

你可以尝试这样的FLOORfunction:

 SELECT FLOOR(columnName), moreColumns, etc FROM myTable WHERE ... 

你也可以尝试FORMAT函数,只要你知道小数位可以省略:

 SELECT FORMAT(columnName,0), moreColumns, etc FROM myTable WHERE ... 

你可以结合这两个function

 SELECT FORMAT(FLOOR(columnName),0), moreColumns, etc FROM myTable WHERE ... 

从您链接到的文章:

该types可以是以下值之一:

BINARY [(N)]

CHAR [(N)]

date

约会时间

DECIMAL [(M [,d])]

签名[INTEGER]

时间

UNSIGNED [INTEGER]

尝试SIGNED而不是INT

在这个目的的mysql更优化的方式*:

 SELECT columnName DIV 1 AS columnName, moreColumns, etc FROM myTable WHERE ... 

使用DIV 1FLOOR 速度更快 ,更不用说像FORMAT那样的基于string的函数了

(*)注意:正如Grbts所指出的,当使用非无符号/正值时,请注意DIV 1的行为。

floor()和DIV 1之间有一个重要的区别。对于负数,它们的行为有所不同。 DIV 1返回整数部分(如带符号的那样),floor(x)返回“不大于x的最大整数值”(从手册中)。 所以: selectfloor(-1.1)的结果是-2,而select-1.1 div 1的结果是-1

用这个

 mysql> SELECT TRUNCATE(223.69, 0); > 223 

这是一个链接

CAST()函数不支持MySQL中的“官方”数据types“INT”,它不在支持的types列表中 。 对于MySQL,可以使用“SIGNED”(或“UNSIGNED”)代替:

 CAST(columnName AS SIGNED) 

但是,这似乎是MySQL特定的(不标准化的),所以它可能不适用于其他数据库。 至less这个文件(第二次非正式审查草案)ISO / IEC 9075:1992,数据库在第4.4 Numbers中没有列出“SIGNED”/“UNSIGNED”。

但是DECIMAL既是标准化的,也是MySQL的支持,所以下面这个应该适用于MySQL(testing过的)和其他数据库:

 CAST(columnName AS DECIMAL(0)) 

根据MySQL文档 :

如果比例为0,则DECIMAL值不包含小数点或小数部分。

还有ROUND(),如果你的数字不一定总是以.00结尾。 圆(20.6)会给21,圆(20.4)会给20。

你可以试试这个:

 SELECT columnName1, CAST(columnName2 AS SIGNED ) FROM tableName 

尝试cast (columnName as unsigned)

无符号的只是正值

如果你想包括负值,然后cast (columnName as signed)
符号(负号包括)与无符号号(符号大小的两倍,但非负号)

1分:没有空格b / w CAST和(表情)。 即CAST(columnName AS SIGNED)。