嵌套的CAST无法正常工作

6
为什么MySQL中的嵌套转换无法使用?(在SQL Server中可以)
select cast(cast(myColumn as decimal(5,2)) as int) from myTable 

SQLFiddle Example


你想要实现什么?将数据转换为 UNSIGNED,再将结果解释为有符号的 INT,这样做的目的是什么?这难道不会和直接执行 CAST(myColumn AS INT) 有相同的效果吗? - eggyal
@eggyal:我修改了我的例子。问题是尝试在varchar字段中查找整数,并忽略像这样的小数: select * from tab where cast(cast(myColumn as decimal(5,2)) as int) = cast(myColumn as decimal(5,2)) - juergen d
为了实现这一点,您可能会发现使用正则表达式来测试您的列更容易。有关更多信息,请参见此问题 - eggyal
@eggyal:你说得完全正确。但是如果需要嵌套转换,我仍然想知道该怎么做。 - juergen d
确实。我希望其他人能为您解决这个问题,因为我所能想到的唯一方法是在子查询中执行第一个“CAST”,然后在外部查询中执行第二个“CAST”。 - eggyal
2个回答

3
根据手册,有以下两种类型转换函数:

CAST(expr AS type) [...]

CONVERT(expr,type) [...]

type可以是以下值之一:

  • BINARY[(N)]

  • CHAR[(N)]

  • DATE

  • DATETIME

  • DECIMAL[(M[,D])]

  • SIGNED [INTEGER]

  • TIME

  • UNSIGNED [INTEGER]

所以,只需按照手册操作即可。
SELECT CAST(CAST(myColumn AS DECIMAL(5,2)) AS SIGNED) FROM myTable

或者

SELECT CAST(CAST(myColumn AS DECIMAL(5,2)) AS UNSIGNED) FROM myTable

0

这个查询基于嵌套转换的概念。

从表名中选择cast(sum(cast(Column_name int )+ cast(Column_name as int)) as bigint)作为payment


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接