意外的查询结果

2024-06-19

为什么我从 sql-server 得到以下结果?

SELECT '' + 12 C1, CONVERT(int, '') C2,
       CASE WHEN '' = ' ' THEN 'equal' ELSE 'not equal' END C3

Sql-Server Fiddle 演示 http://sqlfiddle.com/#!3/d41d8/9429

--Results
| C1 | C2 |    C3 |
-------------------
| 12 |  0 | equal |

EDIT:C3已得到答复。大家纷纷思考回答'' + 12 = 12是字符串连接,但它是一种数学运算。目前尚不清楚为什么(NOT how) ''在 sql-server 中转换为 0。


这或多或少是预期的行为。来自 SQL (ISO/ANSI) 标准的副本:

两个字符串表达式的比较取决于用于比较的排序规则。当比较不等长度的值时,如果比较的排序规则具有NO PAD特征并且较短的值等于较长值的某个前缀,则较短的值被认为小于较长的值。如果比较的排序规则具有PAD SPACE出于比较的目的,通过在右侧连接 ,较短的值可以有效地扩展到较长的值.

现在,大多数 DBMS 都实现了字符串比较,但略有不同。在SQL_Server和MySQL中,你会发现'', ' ', '  ' and '   '(带有 0、1、2 和 3 个空格的字符串)都是相等的,无论它们是否定义为VARCHAR or CHAR.

在 Postgres 中,如果它们是VARCHAR但等于如果CHAR(所以没有填充VARCHAR列)。如果其中之一是 VARCHAR 和一个 CHAR,那么它们会相等,所以我猜填充是在比较之前完成的。

Oracle 与 Postgres 类似,但有一个额外的特点:空字符串''行为(几乎在任何地方)为NULL。因此,当您将其与带有一个或多个空格(或与其自身)的字符串进行比较时,结果既不是 True 也不是 False 而是UNKNOWN。 Oracle 还有一个区别,如果一个字符串定义为VARCHAR另一个作为CHAR,比较起来比较复杂。根据测试,我假设只有CHAR在这种情况下被填充,直到它们的(定义的数据类型)长度,然后与未填充的进行比较VARCHAR.

您可以在以下位置检查(所有 4 个 DBMS):SQL-Fiddle http://sqlfiddle.com/#!4/ad51e/1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

意外的查询结果 的相关文章

  • 存储过程中的分组和循环

    我需要对 MTH1 MTH2 等列进行求和 但对于我传递的参数 它将为同一帐户代码生成六行信息 这是正确的 它应该产生什么我的问题是如何只返回其中一个数据 但是到目前为止 这就是我的存储过程中六行的总和 ALTER PROCEDURE db
  • Power Query 根据 Excel 列列表过滤 SQL 视图

    有没有办法使用 Power Query 根据 Excel 表列中的值列表过滤 SQL 视图 我有一个返回大量数据 数百万条记录或属性 的 SQL 视图 用户希望根据属性 ID 的 Excel 表格列进行过滤 我知道我可以根据 Power 查
  • 基于 SQl Server 2008 中的 2 列的唯一键?

    SQL Server 是否可以拥有基于 2 列的唯一键 我可以在两列中都有重复项 但不能同时存在 MfgID CustNum 1 Cust01 1 Cust02 2 Cust02 1 Cust03 3 Cust03 3 Cust04 1 C
  • SQL Server 2016升级到13.0.15700.28版本后频繁出现System.OutOfMemoryException

    我在具有多个显示器 16 GB DDR4 RAM 4 Ghz I7 GTX 970 的开发盒上运行 Windows 10 Pro 64 位 我使用 SQL Server 2016 Developer Edition 和 VS 2015 En
  • SQL Compact 3.5附加多个数据库/跨数据库查询?

    是否可以将多个数据库附加到 SQL CE 3 5 精简版 例如MasterData sdf Orders sdf 并对它们应用查询 例如 选择 Orders iOrderID Orders cItemID MasterData cItemD
  • 更新语句错误:子查询返回超过 1 个值

    我正在尝试更新列中的所有记录 以便它们以 CD 开头 例如DCE206 将成为 CDE206 UPDATE table SET column REPLACE column1 DC CD WHERE column1 LIKE DC 我正在使用
  • 连接别名计算列中的行

    我有两张表 一张名为 Car 一张名为 Mileage 汽车表有以下列 CarName varchar max 里程表有以下列 CarMileage int CarName varchar max TotalGasTrips int 我的代
  • 如何将 ROW_NUMBER() 分配给列?

    看完之后这个问题 https stackoverflow com questions 1293390 sql to output line number in results of a query 我还有一个类似的问题 有没有一种简单的方法
  • SQL Server:十进制精度/小数位数产生奇怪的结果

    我正在为一个项目编写一些 SQL 我注意到 SQL Server 中一些看似奇怪的行为 涉及除以小数时的答案 以下是一些示例 说明了我所看到的行为 DECLARE Ratio Decimal 38 16 SET Ratio CAST 210
  • 有没有办法将加密的脚本插入 SQL Server 数据库?

    我的公司认为我们编写的数据库脚本是我们知识产权的一部分 在新版本中 我们为用户提供了由两部分组成的设置 桌面应用程序 一个可执行文件 它包含了初始化 更新数据库的复杂性 RedGate SQL Packager 我知道一旦脚本存在我就可以加
  • MS SQL 2005 备份能否恢复到 MS SQL 2008 实例上?

    是否可以将 SQL Server 2005 数据库的备份恢复到 SQL Server 2008 的实例上 我需要重建一台服务器 因为它变得相当糟糕 所以我计划借此机会升级到 SQL 2008 并想知道我是否能够正常恢复我的备份 从 2005
  • GRANT EXECUTE 所需的权限

    我正在为需要能够创建和删除过程但也向其他用户授予执行权限的用户创建一个组 GRANT CREATE PROCEDURE TO xxx xxx GRANT ALTER ON SCHEMA dbo TO xxx xxx 但是 我需要向组授予什么
  • sql查询中where子句中的CASE语句

    我正在尝试在我正在处理的查询的 where 子句中编写一个 case 语句 我正在水晶报告中导入代码 我基本上是想说明变量 类型 是否设置为 创建 以便在where子句中为该日期范围运行 否则为不同的日期范围运行 它一直给我一个错误 我似乎
  • SSRS报告不显示数据

    我刚刚创建了 SQL Server 2005 SSRS 报告 数据未显示在预览窗格中 数据集是根据字符串参数从存储过程正确填充的 我可以在数据窗格中执行它 在预览窗格中运行报表时 会显示正确的行数 但单元格的内容不包含任何数据 源数据集基于
  • 查找SQL记录中的并发用户数

    我有以下结构的表 UserID StartedOn EndedOn 1 2009 7 12T14 01 2009 7 12T15 01 2 2009 7 12T14 30 2009 7 12T14 45 3 2009 7 12T14 47
  • Redis 与 SQL Server 性能对比

    应用程序性能是使用缓存而不是关系数据库的主要原因之一 因为它以键值对的形式将数据存储在内存中 所以我们可以将经常访问的不经常更改的数据存储在缓存中 从缓存中读取比从数据库中读取要快得多 Redis 是分布式缓存市场上最好的解决方案之一 我正
  • 开发和生产 SQL Server 之间使用不同的排序规则会出现哪些问题?

    盘问 无法更新 sys columns 还有其他方法吗 https stackoverflow com questions 4018347 unable to update sys columns any other approach含糊地
  • SQL Server 2014执行计划创建需要很长时间(旧版本中很快)

    我在 SQL Server 2014 中遇到一个查询问题 第一次运行该查询时 需要很长时间才能生成执行计划 奇怪的是 它在 SQL Server 的所有早期版本 2012 2008 R2 2008 等 中都运行良好 它似乎与所涉及的表之一上
  • 如何在 Windows 7 - 64 位中安装 IBM db2 ODBC 驱动程序?

    我需要从本地 SQL Server 2008 R2 连接到远程 DB2 我不想使用链接服务器 因此 我正在搜索下载并尝试安装 IBM DB2 驱动程序 因为主机集成服务器附带的用于 DB2 的 Microsoft ODBC 驱动程序非常昂贵
  • SQL Server 数据归档解决方案

    我正在寻找一种解决方案来存档数据库中存在的数据 我的数据库是 SQL Server 2008 大约有 250 个表 我搜索网络并找到以下链接 http www dbazine com sql sql articles charran13 h

随机推荐

  • 处理过时的 NSURL 书签的正确方法是什么?

    从安全范围的书签解析 NSURL 时 如果用户已重命名或移动该文件或文件夹 则该书签将过时 苹果的文档对于陈旧性有这样的描述 isStale 返回时 如果是 则书签数据已过时 你的应用程序应该 使用返回的 URL 创建一个新书签并用它代替
  • 按字符分割字符串

    scala 有一个标准的分割字符串的方法StringOps split 但它的行为有点让我惊讶 演示一下 使用快捷便利功能 def sp str String str split toList 以下表达式全部计算结果为 true sp Li
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • BlackBerry SQLite:将一个 SQLite 数据库连接到另一个

    我正在尝试使用 SQLite 将一个 SQLite 数据库附加到 BlackBerry 上的另一个数据库附加数据库 http www sqlite org lang attach html命令 Database d1 d2 Statemen
  • Java 泛型:如何为泛型类型指定类类型?

    我有一个 POJO 指定为 MyClass u where U是泛型类型参数 我正在尝试编写一个接受类引用的实用方法Class u
  • VS 2010 Web应用程序中的ASP.NET Web Api CRUD操作

    我尝试在 VS 2010 Web 应用程序中进行 ASP NET Web Api CRUD 操作 但为什么结果没有从源表返回所有整行 这是我的代码 路线 Globax asax protected void Application Star
  • WebClient读取错误页面的内容

    我有一个加载页面内容的应用程序 我使用 WebClient 类 即使服务器返回 404 500 等错误 我也需要检索内容 我需要这样的东西 WebClient wc new WebClient string pageContent try
  • C# 中的协变和逆变

    首先我要说的是 我是一名正在学习 C 编程的 Java 开发人员 因此 我会将我所知道的与我正在学习的进行比较 我已经使用 C 泛型几个小时了 我已经能够在 C 中重现我在 Java 中知道的相同内容 除了几个使用协变和逆变的示例 我正在读
  • Pandas 合并指标自定义值

    在 pandas 合并期间将指示器更新为更友好的消息的最快方法是什么 默认indicator True yields left only right only both 我想更新为Only present in last month s d
  • 在 django 中导入设置时出现奇怪的错误

    我有很多项目在 ubuntu 中使用 python2 7 和 virtualenv virtualenvwrapper 工作 在我的工作中 一些开发人员使用 macosx 和 windows 通常我像往常一样创建项目 django admi
  • 如何为 Windows 安装开源 Qt 库 5 二进制版本

    这个问题具体是关于Qt libraries 5 0 0 for Windows VS 2010 406 MB at http qt project org downloads http qt project org downloads 但我
  • 从 sbt 程序集运行 uber jar 会导致错误:无法找到或加载主类

    我有一个使用 sbt 程序集插件打包为 uber jar 的 Spark 作业 这build sbt指定一个可运行的 main 作为生成的 uber jar 的目标 mainClass in assembly Some com foo Ba
  • Android 中的垂直和水平滚动视图

    我真的很累了寻找垂直和水平滚动视图的解决方案 我读到框架中没有任何视图 布局实现此功能 但我需要这样的东西 我需要在其他布局中定义一个布局 子布局必须实现垂直 水平滚动才能移动 最初实现了一个逐像素移动布局的代码 但我认为这不是正确的方法
  • Kendo 网格列模板中的条件

    我需要在我的剑道网格列模板中应用一个条件 这是我的代码 columns field EmpName title Name template a href if empName null show xxx else I want to sho
  • 使用 OpenSSL 在 PHP 中进行 AES 加密/在 Node.js 中进行解密

    我正在使用 PHP 和 Nodejs 使用 OpenSSL 进行对称加密 PHP 使用 OpenSSL 库 Node js 解密基于实现的加密 问题是 Node js 中的解密文本只是部分正确 PHP 加密函数 function encry
  • 光滑的旋转木马不工作

    我一直在尝试简单地实现 Slick Carousel 的工作 我已按照 Git 页面上的说明进行操作 https github com kenwheeler slick https github com kenwheeler slick 这
  • Android NDK C++“wstring”支持

    我有用 C 编写的源代码 lib 现在我想在 Android NDK 项目 NDK 6 中编译并使用相同的源代码 lib 我能够编译大多数 C 文件 除了基于 std wstring 的功能 在 Application mk 中 当我指定时
  • 如何制作无限的jscrollpane?

    我之前已经实现过拖动滚动 但是创建无限滚动窗格的最佳方法是什么 当然不会有任何滚动条 我将实现拖动滚动 我想做的是在无限表面上实现动态加载 EDIT 当然 它实际上不会是无限的 我想问如何伪造它 您可以执行以下操作 AdjustmentCl
  • 我的 Reporting Services 2008 Web 服务 URL 仅显示目录列表

    我的机器上设置了报告服务 我可以访问http localhost 8080 Reports SQL2008 http localhost 8080 Reports SQL2008报告管理器工作正常 当我尝试访问 Web 服务 URL htt
  • 意外的查询结果

    为什么我从 sql server 得到以下结果 SELECT 12 C1 CONVERT int C2 CASE WHEN THEN equal ELSE not equal END C3 Sql Server Fiddle 演示 http