SQL语句匹配任何内容
我在SQL语句中为一个类似这样的应用程序使用正则表达式 从id={{REPLACEME}的表中选择* 然而,有时我并没有给出一个参数来替换这个字符串。有没有一种方法可以用任何匹配的东西来代替它。我试过了,但没用SQL语句匹配任何内容,sql,replace,match,Sql,Replace,Match,我在SQL语句中为一个类似这样的应用程序使用正则表达式 从id={{REPLACEME}的表中选择* 然而,有时我并没有给出一个参数来替换这个字符串。有没有一种方法可以用任何匹配的东西来代替它。我试过了,但没用 SELECT*FROM-table,其中id=id将匹配具有非nullid 从id=id或id为NULL的表中选择*将匹配所有行 id可能是一个主键,因此您可以使用前者。我只能用一个示例来描述我的解决方案。@AllRec是一个参数: Declare @AllRec bit set @Al
SELECT*FROM-table,其中id=id
将匹配具有非nullid
从id=id或id为NULL的表中选择*
将匹配所有行id
可能是一个主键,因此您可以使用前者。我只能用一个示例来描述我的解决方案。@AllRec
是一个参数:
Declare @AllRec bit
set @AllRec = {0|1} --as appropriate
SELECT *
FROM table
WHERE
(
id = {{REPLACEME}}
and @AllRec = 0
) OR (
@AllRec = 1
)
在此解决方案中,如果
@AllRec
为1,则返回所有内容,忽略id
过滤器。如果@AllRec
为零,则应用id
过滤器,得到一行。您应该能够快速地将其适应当前的正则表达式解决方案。将{{REPLACEME}}替换为
[someValidValueForYouIdType] OR 1=1
使用Regex Replace选项会导致SQL注入攻击 假设您的语言支持参数化查询,请尝试Jacob答案的修改版本:
SELECT * FROM table WHERE (id = @id OR @id IS NULL)
问题是,您必须始终提供@id值。不确定您使用的是哪种语言,这段代码让我有些害怕,但是
var statement = "SELECT * FROM table";
If REPLACEME is not empty Then
statement += " WHERE id = {{REPLACEME}}"
End If
这在这种情况下确实有效,但如果谓词变得更复杂,可能会由于运算符优先级而得到不需要的结果。是的,但我假设他希望在没有id的情况下得到所有结果。对我来说这听起来也有点奇怪,但我不会反驳他的商业逻辑。如果找不到任何记录,我只会返回null。我想OP需要一个正则表达式字符串来匹配任何东西。如果他们想把WHERE子句改写成不同的东西,他们可以完全删除它。我不知道这是如何解决问题的。id=id与no WHERE子句相同。。。。(假设非空限制),对吗?我认为OP有一堆选择语句,形式如问题中所示;因为我们需要用某物替换{{REPLACEME}},所以它应该是身份。删除WHERE子句会更好,但这不是OP所要求的。
SELECT field1, field2
FROM dbo.yourTable
WHERE id = isnull(@var, id)