我正在尝试这样做:
SELECT CAST(columnName AS INT), moreColumns, etc
FROM myTable
WHERE ...
我在这里查看了帮助常见问题解答:http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html,它说我可以像CAST(val AS TYPE)
那样做,但它不起作用。
尝试将小数转换为int,实际值为223.00,我想要223
答案 0 :(得分:89)
您可以尝试这样的FLOOR功能:
SELECT FLOOR(columnName), moreColumns, etc
FROM myTable
WHERE ...
如果您知道可以省略小数位,您也可以尝试FORMAT函数:
SELECT FORMAT(columnName,0), moreColumns, etc
FROM myTable
WHERE ...
您可以将两个功能组合在一起
SELECT FORMAT(FLOOR(columnName),0), moreColumns, etc
FROM myTable
WHERE ...
答案 1 :(得分:20)
从您链接的文章:
类型可以是以下值之一:
BINARY [(N)]
CHAR [(N)]
DATE
DATETIME
DECIMAL [(M [,d)]
签名[INTEGER]
TIME
UNSIGNED [INTEGER]
尝试使用SIGNED
代替INT
答案 2 :(得分:19)
mysql中用于此目的的更优化方式*:
SELECT columnName DIV 1 AS columnName, moreColumns, etc
FROM myTable
WHERE ...
使用 DIV 1 是huge speed improvement超过 FLOOR ,更不用说基于字符串的功能,例如 FORMAT < / p>
mysql> SELECT BENCHMARK(10000000,1234567 DIV 7) ;
+-----------------------------------+
| BENCHMARK(10000000,1234567 DIV 7) |
+-----------------------------------+
| 0 |
+-----------------------------------+
1 row in set (0.83 sec)
mysql> SELECT BENCHMARK(10000000,1234567 / 7) ;
+---------------------------------+
| BENCHMARK(10000000,1234567 / 7) |
+---------------------------------+
| 0 |
+---------------------------------+
1 row in set (7.26 sec)
mysql> SELECT BENCHMARK(10000000,FLOOR(1234567 / 7)) ;
+----------------------------------------+
| BENCHMARK(10000000,FLOOR(1234567 / 7)) |
+----------------------------------------+
| 0 |
+----------------------------------------+
1 row in set (8.80 sec)
(*)注意:正如Grbts所指出的,当与非无符号/正值一起使用时,请注意DIV 1的行为。
答案 3 :(得分:12)
答案 4 :(得分:10)
floor()和DIV 1之间存在重要差异。对于负数,它们的行为有所不同。 DIV 1返回整数部分(如有符号所示),而floor(x)返回“不大于x的最大整数值”(来自手册)。所以:选择楼层(-1.1)会产生-2,而选择-1.1 div 1 会产生-1
答案 5 :(得分:7)
CAST()函数不支持MySQL中的“官方”数据类型“INT”,它不在the list of supported types中。使用MySQL,可以使用“SIGNED”(或“UNSIGNED”)代替:
CAST(columnName AS SIGNED)
但是,这似乎是特定于MySQL的(未标准化),因此它可能无法与其他数据库一起使用。至少this document (Second Informal Review Draft) ISO/IEC 9075:1992, Database未在4.4 Numbers
部分列出“已签名”/“未签名”。
但是DECIMAL既标准化又受MySQL支持,因此以下内容适用于MySQL(已测试)和其他数据库:
CAST(columnName AS DECIMAL(0))
根据MySQL docs:
如果比例为0,则DECIMAL值不包含小数点或 分数部分。
答案 6 :(得分:3)
如果您的号码不一定总是以.00结尾,那么还有ROUND()。 ROUND(20.6)将给出21,而ROUND(20.4)将给出20。
答案 7 :(得分:3)
你可以试试这个:
SELECT columnName1, CAST(columnName2 AS SIGNED ) FROM tableName
答案 8 :(得分:1)
尝试cast (columnName as unsigned)
无符号仅为正值
如果您想包含负值,则cast (columnName as signed)
,
符号(负包括)和无符号(符号大小的两倍,但非负)之间的差异
答案 9 :(得分:0)
1分: 没有空间b / w CAST和(表达式)。 即,CAST(columnName AS SIGNED)。