首页 > 解决方案 > 正则表达式用 Postgresql LIMIT 语法转换 Sql Server TOP 语法

问题描述

我有一个 sql server 查询,例如:

Select TOP 2 * from customer order by id desc

并希望将其替换为;

Select * from customer order by id desc LIMIT 2

我如何使用正则表达式来做到这一点?该查询可能有子查询,其中也包括 TOP 语句。基本上,我想用 LIMIT 替换 TOP 语句,以使查询与 Postgresql 一起工作

标签: c#regex

解决方案


简单地说,在 .NET 语法中,这可能看起来像一个(不区分大小写的)正则表达式:

SELECT TOP (?<t>\d+)(?<q>.*?ORDER BY[ a-z]+)

并更换

SELECT ${q} LIMIT ${t}

例如

这是一个非常简单的案例,它不能很好地处理子查询。您可以在 find-str 中跳过 ORDER BY 的存在...

但这并不是一件简单的事情,用正则表达式解析编程语言就像试图用它来解析 html。您可以更多地参与重复替换和负前瞻以避免匹配您已经替换的内容。但是如果您正在查看复杂的场景,最好查看正确解析 SQL


推荐阅读