mysql> select 0.121='0.121';
+---------------+
| 0.121='0.121' |
+---------------+
| 1 |
+---------------+对于其他数据库,number='number'为true是否也适用
发布于 2010-04-22 00:09:04
首先:大多数数据库都使用本地化数字格式。因此,将数字转换为字符串很可能并不总是与您的硬编码字符串相同。
然后:你会发现你使用的sql语法有问题。请看我对oracle bellow的实验。
在Oracle中,您总是需要一个FROM子句(除非他们在版本10中对此进行了更改)。
select 0.121='0.121' from sys.dual在Oracle中,不能在select子句中使用这样的表达式。
您需要一条case语句:
select case when 0.121 = '0.121' then 1 else 0 end as xy
from sys.dual然后你会得到一个错误,那就是它不是数字。要解决此问题,请将其转换为:
select case when To_Char(0.121) = '0.121' then 1 else 0 end as xy
from sys.dual这将返回0!因为在我的机器上,0.121被转换为字符串".121"。这些是瑞士的设置。如果我使用德语设置,它将是",121" (注意逗号)。
所以最后要回答这个问题:No。
发布于 2010-04-22 00:09:02
即使真的发生了。这对你有什么帮助?我永远不会,永远不会做出这样的假设。您始终需要将这两个操作数转换为相同的类型,以便至少您知道要比较的是什么。
发布于 2010-04-22 00:16:43
大多数有信誉的数据库都会对这种类型的查询进行隐式转换。对于特定系统上的隐式转换,可能会有已公布的规则--您必须查看供应商状态,以找出在您的系统上进行了哪些隐式转换。
例如,这里(http://msdn.microsoft.com/en-us/library/aa224021(SQL.80%29.aspx)'s是微软对SQL Server2000的官方参考,here是关于SQL Server隐式转换的博客条目。
https://stackoverflow.com/questions/2684555
复制相似问题