【问题标题】:Comma inside like query fails to return any result类似查询中的逗号无法返回任何结果
【发布时间】:2016-07-28 18:28:20
【问题描述】:

使用 Oracle 数据库,

Select name from name_table where name like 'abc%';

返回一行,其值为“abc, cd”,但是当我在类似查询中使用 % 前的逗号进行选择查询时,它无法返回任何值。

Select name from name_table where name like 'abc,%';

不返回任何行。如何在 like 查询中处理 % 之前的逗号?

示例: 数据库在名称列中有“Sam,Smith”,当类似有“Sam%”时它返回一行,当我执行“Sam,%”时它不返回任何行

【问题讨论】:

  • 数据库在名称列中有“Sam, Smith”,当 like 有“Sam%”时它返回一行,当我执行“Sam,%”时它不返回任何行
  • 你能做到select dump(name, 16) from name_table where name like 'abc%'; 并将结果添加到问题中吗?我怀疑这不是一个普通的逗号,但可能是其他一些看起来相似的 Unicode 字符......
  • 可能是逗号上的编码。如果您存储了 ms 逗号(比如您或从 MS Office 剪切并粘贴的某人),除非您使用相同的字符,否则它将不匹配。
  • 编码,你一定会喜欢的。
  • 该转储是字符串'GOOGLE INC',它没有逗号。我了解您可能不想提供真实数据,但如果您不向我们提供我们可以使用的任何东西,我们将无法帮助您。自己查看转储,看看哪个代码点被报告为你认为是逗号的,至少。

标签: sql oracle


【解决方案1】:

NOT AN ANSWER,但将其作为一个答案发布,因为我无法在评论中格式化。

看看这个并在你自己的机器上使用 DUMP()...看看这是否有帮助。

SQL> select dump('Smith, Stan') from dual;

DUMP('SMITH,STAN')
-----------------------------------------------------
Typ=96 Len=11: 83,109,105,116,104,44,32,83,116,97,110

如果算的话,字符串是 11 个字符(包括逗号和空格)。逗号是第 44 个字符,空格是第 32 个字符。如果您查看您的字符串,但看不到 44 应该在逗号的位置,您就会知道这是问题所在。然后,您可以告诉我们您在此处看到的内容(仅针对该角色,我知道发布“Leno,Jay”会侵犯隐私)。

另外,请确保在逗号之前没有任何多余的字符(可能是不可打印的字符!)。只需比较您用作输入的两个字符串,看看差异可能在哪里。

【讨论】:

  • 我认为这是一个不错的 partial answer,提供的信息尽可能完整,并引导 OP 朝着合理有用的方向发展。
猜你喜欢
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
相关资源
最近更新 更多