为什么 Oracle 的 varchar 排序顺序与 varchar 比较的行为不匹配?

2023-11-21

一条 SQL 语句如:

select * from (
  select '000000000000' as x from dual
  union
  select '978123456789' as x from dual
  union 
  select 'B002AACD0A' as x from dual
) /*where x>'000000000000'*/ order by x;

Yields:

B002AACD0A
000000000000
978123456789

取消注释 WHERE 限制后,结果是:

B002AACD0A
978123456789

我原以为结果只是978123456789 since B002AACD0A之前返回000000000000运行查询时不受限制。

如何解释这种行为?我该如何对 varchar 进行排序和比较,以便它们可以像处理整数一样一起工作?

有趣的是,当将限制更改为x>'B002AACD0A',结果为空。将其更改为x>978123456789回报B002AACD0A.

IE。比较时:

B002AACD0A > 978123456789 > 000000000000

但排序时:

978123456789 > 000000000000 > B002AACD0A 

当显式使用二元排序时(order by NLSSORT(x,'NLS_SORT=BINARY_AI')),结果是B002AACD0A>978123456789>000000000000并匹配比较的行为。但我仍然不知道为什么会发生这种情况。


Peter,

排序的行为由NLS_SORT会话参数,而比较的行为取决于NLS_COMP范围。你一定有不匹配的地方。

我使用以下参数获得与您相同的结果:

SQL> SELECT *
  2    FROM nls_session_parameters
  3   WHERE parameter IN ('NLS_COMP', 'NLS_SORT');

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_SORT                       FRENCH
NLS_COMP                       BINARY

然而,当两者匹配时,结果是一致的:

SQL> alter session set nls_comp=LINGUISTIC;

Session altered

SQL> select * from (
  2    select '000000000000' as x from dual
  3    union
  4    select '978123456789' as x from dual
  5    union
  6    select 'B002AACD0A' as x from dual
  7  ) /*where x>'000000000000'*/ order by x;

X
------------
B002AACD0A
000000000000
978123456789

SQL> select * from (
  2    select '000000000000' as x from dual
  3    union
  4    select '978123456789' as x from dual
  5    union
  6    select 'B002AACD0A' as x from dual
  7  ) where x > '000000000000' order by x;

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

为什么 Oracle 的 varchar 排序顺序与 varchar 比较的行为不匹配? 的相关文章

  • Oracle存储过程使用数组作为表插入的参数

    我一直在寻找一个明显的例子 但没有运气 抱歉 如果已经回答了 我正在尝试做一些非常简单的事情 一个存储过程 它将获取输入并将它们插入到表中 我希望它获取多行数组并一次全部插入 我认为这很简单 但我还没有找到一个可以展示我的例子 在很多例子中
  • 递归 SQL 给出 ORA-01790

    使用 Oracle 11g 第 2 版 以下查询给出 ORA 01790 表达式必须与相应表达式具有相同的数据类型 with intervals time interval AS select trunc systimestamp from
  • 如何对同一列上的数据帧列表中的所有数据帧进行排序?

    我有一个数据框列表dataframes list 举个例子 我把dput dataframes list 在底部 我想对列列表中的所有数据框进行排序enrichment 我可以对一个数据框进行排序 first dataframe lt da
  • Oracle 9i:同义词表不存在?

    我创建了一个包 其中包含一个存储过程 我计划从单独的应用程序调用该存储过程 存储过程将返回架构中所有视图和表的排序列表 为此 它对 DBA TABLES 和 DBA VIEWS 同义词执行简单的选择 如下所示 CREATE OR REPLA
  • TOAD 将 &String 视为绑定变量

    我正在使用 Oracle Data Integrator 开发一些 ETL 有时会使用 TOAD 测试部分代码 今天我遇到了 TOAD 的问题 我有一行像 AND column value like DEV PROD 当我尝试运行包含上面过
  • 如何在Oracle中使用Timestamp_to_scn和Scn_to_timestamp?

    我的查询结果是这样的 select cast to date a start time mm dd yyyy hh mi ss pm as timestamp date of call ora rowscn from calling tab
  • 按常量 id 对自定义类型的向量进行排序

    我需要对自定义类型的向量进行排序std vector
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • Oracle查询结果分页无TABLE FULL SCAN数据访问方式

    stackoverflow 上有很多关于如何正确执行分页的问题 对于 Oracle 来说 最流行的答案是这样的 select from select row rownum rownum from select from some table
  • 如何测试两个大视频是否相同?

    我有一个系统 其中会摄取视频文件 然后启动多个 CPU 密集型任务 由于这些任务的计算成本很高 如果文件已经被处理过 我想跳过处理该文件 视频来自各种来源 因此文件名等不是可行的选择 如果我使用图片 我会比较 MD5 哈希值 但对于 5GB
  • 如何在vb.net中对datagridview的3列进行排序

    下面我想对 ProductCode ColorCode 和 Size 列进行排序 请指导 对 大小 列中的信息进行排序 Size Number sequence XS 1 S 2 M 3 L 4 XL 5 XXL 6 2L 7 3L 8 4
  • 删除近排序数组中未排序/离群元素

    给定一个像这样的数组 15 14 12 3 10 4 2 1 我如何确定哪些元素乱序并删除它们 在本例中为数字 3 我不想对列表进行排序 而是检测异常值并将其删除 另一个例子 13 12 4 9 8 6 7 3 2 我希望能够删除 4 和
  • Delphi 5 中的 Oracle 数据库连接

    我正在使用 Delphi 5 版本 我想连接到 Oracle 数据库 我有 TDatabase 组件 我不知道如何通过 Delphi 连接到数据库 请提供连接数据库的步骤 谢谢 The TDatabase http docwiki emba
  • SQL 国家字符 (NCHAR) 数据类型的真正用途是什么?

    也CHAR CHARACTER and VARCHAR CHARACTER VARYING SQL 提供了NCHAR NATIONAL CHARACTER and NVARCHAR NATIONAL CHARACTER VARYING 类型
  • 错误 38824:CREATE 或 REPLACE 命令可能无法更改现有对象的 EDITIONABLE 属性

    我们正在实现数据库生产对象 如包 过程 触发器等 的单元测试系统 为此 我们有一个容器来创建数据库https github com oracle docker images tree master OracleDatabase https
  • Java 8 流排序字符串列表[重复]

    这个问题在这里已经有答案了 我正在流上调用排序方法 java 文档说 Sorted 方法返回一个由该流的元素组成的流 并根据自然顺序排序 但是当我运行下面的代码时 List
  • GUI 测试工具 PyUseCase 与 Dogtail 相比如何?

    GUI测试工具如何Py用例 http pypi python org pypi PyUseCase重命名为故事文本 http pypi python org pypi StoryText 相比于Dogtail http en wikiped
  • 对范围值进行排序

    我想对表示数值范围的字符串数组进行排序 如下所示 b 0 5 100 250 5 25 50 100 250 500 25 50 使用sort我得到的方法 b sort gt 0 5 100 250 25 50 250 500 5 25 5
  • 使用模数按字母顺序对列表进行排序

    我在获取元素列表并按字母顺序对它们进行排序方面没有任何问题 但我很难理解如何使用模数来做到这一点 更新 这是按我的方式工作的代码 但是 我更喜欢下面提供的答案的可重用性 因此接受了该答案
  • 通知设置的数据库设计

    用户可以打开或关闭 他的通知设置 帐户 用于通知 例如 更改帐户资料信息 收到新消息等 通知可以通过电子邮件或手机 推送或短信 发送 用户可以只有 1 封电子邮件和多个手机设备 有什么方法可以改进以下数据库设计或者您会采取不同的方式吗 让我

随机推荐

  • JavaScript 中 {} 和 [] 之间的区别

    我正在研究 javascript 我遇到了这个 if i do let object object length 它会抱怨 object length 未定义 但 let object object length works 有谁知道为什么
  • nginx 和 uwsgi 服务器中 uwsgi 模块的区别

    我是linux开发新手 我对我读到的文档有点困惑 我的最终目标是托管一个简单的 python 支持的 Web 服务 该服务将检查传入的有效负载 并将其转发到其他服务器 这应该少于 30 行 Python 代码 我计划使用 nginx 来提供
  • 从 C 函数返回多个值

    重要的 请参阅这个非常相关的问题 在 C 中返回多个值 我想知道如何在 ANSI C 中做同样的事情 您会使用结构体还是传递函数中参数的地址 我追求极其高效 快速 的代码 时间和空间 即使以可读性为代价 EDIT 感谢所有的答案 好吧 我想
  • Scala 中的映射类型

    有没有办法从 Scala 中的现有类型派生类型 例如 对于case class Person name String age Int 我想要一个Product Tuple of Option String Option Int 即从现有类型
  • 如何修复警告“CoreUI:RunTimeThemeRefForBundleIdentifierAndName()无法在标识符为'(null)'的捆绑包中找到Assets.car”?

    我正在尝试在 iOS 13 beta 上测试应用程序 当我点击欢迎屏幕上的按钮以转到另一个屏幕时 应用程序冻结然后终止 当我在 Xcode 11 中调试时 我在控制台中看到以下警告行 框架 CoreUI RunTimeThemeRefFor
  • Java 中的 AES-256-CBC

    我正在尝试编写一个简单的 Java 程序 该程序将使用以下命令加密纯文本AES 256 CBC 有类 import javax crypto Cipher import javax crypto spec IvParameterSpec i
  • 第一个带有类的元素的 CSS 选择器

    我有一堆带有类名的元素red 但我似乎无法选择第一个元素class red 使用以下 CSS 规则 home red first child border 1px solid red div class home span blah spa
  • 新的 Apple 登录不断抛出错误 HTTP 400 Invalid_grant

    据苹果公司称doc为了验证 Apple 的授权码 我们需要 POST 到http appleid apple com auth token使用这个参数 java token generateJWT keyId teamId clientId
  • 仅使用 CSS 是否可以保持垂直节奏?

    我正在开发一个面向排版的 WordPress 主题 但我在使用内联图像时遇到了麻烦 我可以控制每个元素并调整其行高 下边距等 以保持垂直节奏 但由于通过编辑器粘贴的图像可以具有任意高度 因此它们显然会破坏以下所有内容 是否可以使用边距 填充
  • 在 Java 中使用 GroupLayout 构建 GUI

    我需要使用 GroupLayout 而不是其他布局 构建 GUI GUI 将如下所示 field 1 field 2 field 3 FFIEEELLLDD4 FIELDDDDDD5 FIEEEEEEEEEEEEEEELDDDD 6 字段
  • 停止 webbrowser C# 控件中的警报 javascript 弹出窗口

    这个网站 有这个代码 所以我的网络浏览器控件显示一个弹出窗口 如何在不使用 sendkeys Enter 的情况下绕过弹出窗口 如果您打算永远不使用alert 函数在您的页面上 您也可以覆盖它 例如 如果你确实需要使用 JavaScript
  • 使用 Powershell 调用 Rest API - CosmosDb

    我试图使用 Cosmos DB REST Api 部署 Cosmos 数据库 我正在使用一个函数来构建授权标头 我从以下位置获取了脚本https gallery technet microsoft com scriptcenter How
  • Python,网络驱动程序错误(Selenium)

    import time from selenium import webdriver from selenium webdriver common action chains import ActionChains from seleniu
  • 从 double 中获取小数部分

    我想以整数的形式接收小数点后的数字 例如 从 1 05 开始仅 05 或从 2 50 开始仅 50not 0 50 最好的方法是 var floatNumber 12 5523 var x floatNumber Math Truncate
  • PHP 中的初级数据缓存

    我正在使用 simpleXML 来浏览 Twitter XML 文件的 XML 结果 但我完全不知道如何使用 PHP 缓存结果 本文似乎有一些帮助 但我也遇到过memcache 和memcached 来吧 命名者 我不知道该怎么做 我正在使
  • Pyinstaller 和 Pandas 的导入错误

    我正在尝试将一个简短的 python 脚本捆绑到一个可执行文件中 我能够使用成功运行 pyinstaller pyinstaller script py 但是 当我运行可执行文件时 出现以下错误 我已经尝试了一切 但似乎没有任何效果 C U
  • 错误:在 R 中找不到函数...

    这是一个常见问题解答问题 因此请尽可能完整 答案是社区答案 因此如果您认为缺少某些内容 请随时进行编辑 这个问题在meta上进行了讨论和批准 我正在使用 R 并尝试过some function但我收到以下错误消息 Error could n
  • 公布的磁盘空间与实际磁盘空间[关闭]

    Closed 这个问题是无关 目前不接受答案 为什么广告的磁盘空间几乎总是高于 UI 报告的磁盘空间 例如 我有一个 80 GB 硬盘 但 iTunes UI 仅显示 74 我通常也会在硬盘和驱动器盘符中报告的数量上看到这种情况 您实际可以
  • Bootstrap:固定流体布局中的装订线宽度?

    我想要不同的布局 例如 left content right 和 left content 或 content right 当使用流体布局时 单元格 之间的装订线也是流体的并且具有百分比值 但我希望左 右和内容区域之间的装订线有一个固定的宽
  • 为什么 Oracle 的 varchar 排序顺序与 varchar 比较的行为不匹配?

    一条 SQL 语句如 select from select 000000000000 as x from dual union select 978123456789 as x from dual union select B002AACD