【问题标题】:How to remove the first character from the join statement in where clause of the SQL query如何从 SQL 查询的 where 子句中的 join 语句中删除第一个字符
【发布时间】:2020-12-14 22:20:34
【问题描述】:

我想在下面的 SQL 查询中删除从 cvdl.C 语句返回的第一个字符,并且该值应该与 ccp.B 值匹配。

例如,如果cvdl.C语句返回的实际值是4500,我想去掉4,只取500部分来匹配ccp.B值中的值。我还需要为查询传递一个输入参数值。

如何修改下面的 SQL 查询来实现这个目标?

SELECT ccp.A
FROM ccp, cvdl
WHERE cvdl.J = 'Example' and ccp.B = cvdl.C

【问题讨论】:

  • 如果您有45045001 等怎么办?我认为需要更多示例数据和通用规则。此外,您可以保留旧式连接语法,并使用诸如SELECT ccp.A FROM ccp JOIN cvdl ON ccp.B = cvdl.C 之类的显式连接(顺便说一句,我没有投反对票,只是评论了 :))
  • @Barbaros Özhan 是对的。另外,如果值是 14500 而不是 4500 怎么办?第一个字符总是单个数字吗?您可以提供与实际数据相似的样本随机数据。
  • 不要在意这些值,我只是想查询通常适用于这种情况的方法。另外我忘了提到我还需要传递一个输入参数值。我会编辑它。
  • 什么数据类型?在您的示例中,您使用了一个数字,但是从 4000 中删除的 4 最终将变为 0。这是您想要的吗?还是我们在谈论字符串('4000' 变成 '000')?
  • 顺便说一句:逗号分隔的连接 (FROM ccp, cvdl) 已成为过去。看到你还在使用它们很奇怪。这看起来就像您在 30 年前学习 SQL,然后停在那里。虽然 Oracle 在 2001 年采用“新”语法 (FROM ccp INNER JOIN cvdl ON ...) 很晚,但这仍是 19 年前。

标签: sql oracle join where-clause


【解决方案1】:

你应该使用 ansi-syntax 来加入

    select ccp.A,
      from ccp
inner join cvdl on ccp.B = substr(cvdl.C, 2)
     where cvdl.J = 'Example'

【讨论】:

  • 我刚刚修改了我还需要将输入参数值作为输入传递的问题。也为这种情况做这项工作。不幸的是,当我将其修改为我的场景时,我没有得到正确的响应。
  • 我只是在检查为什么我有一段时间没有得到想要的结果。最后我发现我们应该将 substr 的第二个参数设置为 2 而不是 1 以删除第一个字符。希望你是正确和错误的。非常感谢您的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 2017-09-16
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
相关资源
最近更新 更多