【发布时间】:2017-01-23 20:48:15
【问题描述】:
我希望删除以下语句中 ORDER BY 之后的 upper 关键字:
select upper(a.col1), b.col1
from a join
b
on a.q = b.q
order by upper(a.col1), upper(b.col1)
想要的输出:
select upper(a.col1), b.col1
from a join
b
on a.q = b.q
order by (a.col1), (b.col1)
我尝试过lookbehind 或简单的https://regex101.com/r/sfhDpt/1,但它只匹配一个实例。
上下文是 SQL 翻译 - 原始 SQL 在 MSSQL 或 Oracle 中有效,但在 DB2 或 H2 中无效,因此我需要一种简单的方法(读取、正则表达式)在需要时进行转换。
这甚至可以用一个正则表达式来完成吗?
【问题讨论】:
-
只是为了我的理解,你为什么要只在 order-by 子句中删除上函数的使用?
-
您的两个查询都应该在任何数据库中工作。您确定查询中没有
group by吗?或者,样本数据和期望的结果可能会更好地解释您真正想要做什么。 -
在
order by中使用upper()的最大出现次数是否合理?如果有,这个限制是多少? -
@RavindraHV - 正如我所提到的,如果不是选择的一部分,DB2 和 H2 不允许使用 upper(或其他标量函数)。在我的示例中, b.col1 是问题所在。我知道 SQL 格式不正确,但这就是应用程序的编写方式。
-
@Bohemian - 我在遗留应用程序传递的 SQL 中最多追溯了 3 次出现