我正在尝试这样做:
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
我正在尝试这样做:
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
Answers:
更优化的方式 MySQL的 以此目的*:
SELECT columnName DIV 1 AS columnName, moreColumns, etc
FROM myTable
WHERE ...
使用DIV 1是对FLOOR的巨大改进,更不用说像FORMAT这样基于字符串的函数了
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的行为。
从您链接到的文章:
该类型可以是以下值之一:
BINARY [(N)]
字符[(N)]
日期
约会时间
DECIMAL [(M [,D])]
签名[INTEGER]
时间
未签名的[INTEGER]
尝试SIGNED
代替INT
CAST()函数在MySQL中不支持“官方”数据类型“ INT”,也不在支持的类型列表中。在MySQL中,可以使用“ SIGNED”(或“ UNSIGNED”)代替:
CAST(columnName AS SIGNED)
但是,这似乎是特定于MySQL的(未标准化),因此它可能不适用于其他数据库。至少此文档(第二次非正式审核草案)ISO / IEC 9075:1992,数据库未在章节中列出“签名” /“未签名” 4.4 Numbers
。
但是DECIMAL是MySQL的标准化和受支持的,因此以下内容适用于MySQL(经过测试)和其他数据库:
CAST(columnName AS DECIMAL(0))
根据MySQL文档:
如果小数位数为0,则DECIMAL值不包含小数点或小数部分。
如果您的数字不一定总是以.00结尾,则还有ROUND()。ROUND(20.6)将得出21,而ROUND(20.4)将得出20。