首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这种行为在所有主流数据库中都存在吗?

这种行为在所有主流数据库中都存在吗?
EN

Stack Overflow用户
提问于 2010-04-22 00:03:44
回答 5查看 270关注 0票数 1
代码语言:javascript
复制
mysql> select 0.121='0.121';
+---------------+
| 0.121='0.121' |
+---------------+
|             1 |
+---------------+

对于其他数据库,number='number'true是否也适用

EN

回答 5

Stack Overflow用户

发布于 2010-04-22 00:09:04

首先:大多数数据库都使用本地化数字格式。因此,将数字转换为字符串很可能并不总是与您的硬编码字符串相同。

然后:你会发现你使用的sql语法有问题。请看我对oracle bellow的实验。

在Oracle中,您总是需要一个FROM子句(除非他们在版本10中对此进行了更改)。

代码语言:javascript
复制
select 0.121='0.121' from sys.dual

在Oracle中,不能在select子句中使用这样的表达式。

您需要一条case语句:

代码语言:javascript
复制
select case when 0.121 = '0.121' then 1 else 0 end as xy 
from sys.dual

然后你会得到一个错误,那就是它不是数字。要解决此问题,请将其转换为:

代码语言:javascript
复制
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

票数 6
EN

Stack Overflow用户

发布于 2010-04-22 00:09:02

即使真的发生了。这对你有什么帮助?我永远不会,永远不会做出这样的假设。您始终需要将这两个操作数转换为相同的类型,以便至少您知道要比较的是什么。

票数 3
EN

Stack Overflow用户

发布于 2010-04-22 00:16:43

大多数有信誉的数据库都会对这种类型的查询进行隐式转换。对于特定系统上的隐式转换,可能会有已公布的规则--您必须查看供应商状态,以找出在您的系统上进行了哪些隐式转换。

例如,这里(http://msdn.microsoft.com/en-us/library/aa224021(SQL.80%29.aspx)'s是微软对SQL Server2000的官方参考,here是关于SQL Server隐式转换的博客条目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2684555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档