为什么 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 比较的行为不匹配? 的相关文章

  • 如何按单个整数字段对 JSON 进行排序? [复制]

    这个问题在这里已经有答案了 我有以下 JSON title title order 0 order 9 order 2 JSON 包含很多字段 我如何根据字段对它们进行排序order field 我一直在寻找 Nodejs 中内置的东西 但
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 多级排序

    我有一个表 其中包含一些记录 其中包含名称 评级等字段 我首先想要根据评级将结果限制为 20 进行排序 然后在此结果集上想要进一步应用基于名称的排序 我知道要排序我们需要使用像这样的查询 Select from table order by
  • ggplot2 方面的内部排序

    我正在尝试在 ggplot2 中绘制一个方面 但我很难使不同方面的内部顺序正确 数据如下 head THAT EXT ID FILE GENRE NODE 1 CKC 1823 01 CKC Novels better 2 CKC 1824
  • 使用自定义比较器在 Java 中创建 SortedMap

    我想创建一个TreeMap在 Java 中具有自定义排序顺序 排序后的键是字符串 需要根据第二个字符进行排序 这些值也是字符串 示例地图 Za FOO Ab Bar 您可以像这样使用自定义比较器 Comparator
  • C++并行排序

    我需要对存储在结构数组中的数据块进行排序 结构体没有指针 每个块都有其计数器编号以及数组中数据块与结构块相等的位置的坐标 例如 如果我们有一个数据数组 我们可以将其分为 4 个 NxN 块 那么在结构块的索引数组中我们有 4 个结构块 每个
  • 归并排序究竟进行了多少次比较?

    我读到 在实践中 快速排序比合并排序快得多 其原因是隐藏常量 那么 随机快速排序复杂度的解是2nlnn 1 39nlogn 这意味着快速排序中的常数是1 39 但是合并排序呢 归并排序中的常数是什么 让我们看看能否解决这个问题 在合并排序中
  • 按字段名称对命名元组列表进行排序的 Pythonic 方法

    我想对命名元组列表进行排序 而不必记住字段名的索引 我的解决方案看起来相当尴尬 希望有人能有一个更优雅的解决方案 from operator import itemgetter from collections import namedtu
  • 如何在 Java 中对字符串的 ArrayList 进行排序?

    I have String被放入一个ArrayList随机的 private ArrayList
  • 变体的结构比较

    我想处理整数行的限制 我想拥有Pervasives compare treat RightInfinity gt Point x对全部x 以及反函数LeftInfinity In the ocaml REPL type open pt Le
  • Pandas:根据其他多级列对最里面的列进行分组排序

    考虑下面的 df In 3771 df pd DataFrame A a 11 B b 11 C C1 C1 C2 C1 C3 C3 C2 C3 C3 C2 C2 D D1 D2 D1 D3 D3 D2 D4 D4 D1 D2 D3 E v
  • ora-12528: TNS:Listener: 所有适当的实例都阻止新连接

    当我尝试连接到数据库时收到此错误 ora 12528 TNS Listener 所有适当的实例都阻止新连接 我尝试了以下操作 但没有成功 停止和启动侦听器 关闭和启动数据库 重新启动 oracle 服务 我该如何解决这个问题 您可能会遇到网
  • 基于两个数据库表之间的数据比较创建oracle视图

    我有下表 我想创建视图以便descr O 以及对于常见的id isin两个表中的字段值 检查ratio字段并只取其中的行ratio字段值低 for descr O 如果 id isin 存在于一个表中但不存在于另一个表中 则获取这些行 双向
  • SELECT * FROM 员工 WHERE NULL IS NULL; SELECT * FROM 员工 WHERE NULL = NULL;

    最近开始学习oracle和sql 在学习的过程中 我遇到了我的朋友在面试时被问到的几个问题 SELECT FROM Employees WHERE NULL IS NULL 此查询生成Employees 表中的所有行 至于我所理解的Orac
  • 当尝试在随机数字数组中查找运行最大值时,会调用多少次更新最大值?

    假设我们有一个包含 N 到 N 的整数的数组 数组大小为 2N 1 我们首先对数组中的元素进行混洗 然后尝试通过从第一个元素到最后一个元素迭代数组来找到最大整数 代码示例是Java语言 int called 0 int max Intege
  • 列表列表中出现的频率

    我有一个列表列表 其中每个列表都已排序 我想调查的是某个元素在特定位置出现了多少次 例如 pnc 曾两次出现在第二位 一次出现在第三位 我的数据结构如下 dput degree l list c schwab 0 pnc 0 0344827
  • 关于pl/sql异常的问题

    以下文字摘录自oracle文档Oracle Database PL SQL 语言参考 11g 第 1 版 11 1 未处理的异常也会影响 子程序 如果退出子程序 成功后 PL SQL 将值分配给 输出参数 但是 如果您退出 带有未处理的异常
  • 如何在oracle日志中打印http请求

    我们正在使用以下方式调用外部 URLUTL HTTP方法并设置 HTTP 标头 例如basic authentication keep alive content soap action所以我需要打印我设置为标题的内容 DBMS OUTPU
  • 按 ListProperty (NDB) 对查询进行排序

    如何按 ListProperty 对查询进行排序 该模型 class Chapter ndb Model title ndb StringProperty required True version ndb IntegerProperty
  • Oracle DB & SQL Developer:“错误报告:执行已完成,但有警告” - 如何*查看*该警告?

    我正在设置一个本地 Oracle 11g 数据库 我们已经运行的另一个数据库的克隆 我正在 SQL Developer 中运行一堆生成的 PL SQL 命令 我得到输出 Error starting at line x in command

随机推荐

  • 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