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 1比FLOOR 速度更快 ,更不用说像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)。