我正在尝试这样做:
SELECT CAST(columnName AS INT), moreColumns, etc
FROM myTable
WHERE ...
Run Code Online (Sandbox Code Playgroud)
我在这里查看了帮助常见问题解答:http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html,它说我可以这样做CAST(val AS TYPE),但它不起作用.
试图将小数转换为int,实际值为223.00,我想要223
Rol*_*DBA 103
你可以尝试像这样的FLOOR函数:
SELECT FLOOR(columnName), moreColumns, etc
FROM myTable
WHERE ...
Run Code Online (Sandbox Code Playgroud)
您也可以尝试FORMAT功能,前提是您知道可以省略小数位:
SELECT FORMAT(columnName,0), moreColumns, etc
FROM myTable
WHERE ...
Run Code Online (Sandbox Code Playgroud)
你可以结合这两个功能
SELECT FORMAT(FLOOR(columnName),0), moreColumns, etc
FROM myTable
WHERE ...
Run Code Online (Sandbox Code Playgroud)
fre*_*ley 20
从您链接到的文章:
类型可以是以下值之一:
BINARY [(N)]
CHAR [(N)]
日期
约会时间
DECIMAL [(M [,d])]
签名[INTEGER]
时间
UNSIGNED [INTEGER]
尝试SIGNED而不是INT
Dav*_*sev 19
为此目的在mysql中更优化的方式*:
SELECT columnName DIV 1 AS columnName, moreColumns, etc
FROM myTable
WHERE ...
Run Code Online (Sandbox Code Playgroud)
与FLOOR相比,使用DIV 1是一个巨大的速度提升,更不用说像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)
Run Code Online (Sandbox Code Playgroud)
(*)注意:正如Grbts所指出的,当与非无符号/正值一起使用时,请注意DIV 1的行为.
pan*_*nda 12
用这个
mysql> SELECT TRUNCATE(223.69, 0);
> 223
Run Code Online (Sandbox Code Playgroud)
这是一个链接
小智 10
floor()和DIV 1之间存在重要差异.对于负数,它们的行为不同.DIV 1返回整数部分(如有符号所示),而floor(x)返回"不大于x的最大整数值"(来自手册).所以:选择floor(-1.1)结果为-2,而select -1.1 div 1结果为-1
CAST()函数不支持MySQL中的"官方"数据类型"INT",它不在支持的类型列表中.使用MySQL,可以使用"SIGNED"(或"UNSIGNED")代替:
CAST(columnName AS SIGNED)
Run Code Online (Sandbox Code Playgroud)
但是,这似乎是特定于MySQL(非标准化),因此它可能无法与其他数据库一起使用.至少本文件(第二次非正式审查草案)ISO/IEC 9075:1992,数据库未在章节中列出"签名"/"未签名" 4.4 Numbers.
但是DECIMAL既标准化又受MySQL支持,因此以下内容适用于MySQL(已测试)和其他数据库:
CAST(columnName AS DECIMAL(0))
Run Code Online (Sandbox Code Playgroud)
根据MySQL文档:
如果比例为0,则DECIMAL值不包含小数点或小数部分.
小智 5
你可以试试这个:
SELECT columnName1, CAST(columnName2 AS SIGNED ) FROM tableName
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
161292 次 |
| 最近记录: |