【问题标题】:SQL to select rows that match a URL with wildcardSQL 选择与通配符的 URL 匹配的行
【发布时间】:2010-08-04 22:33:39
【问题描述】:

我在数据库中有一个表,其中一列包含一个 URL,如http://example.com/users/*/profile

我得到了一个 URL(如 http://example.com/users/234/profile),并希望选择 db 中与该 URL 匹配的所有行(在这种情况下,* 是通配符)。

我正在考虑使用正则表达式来执行此操作,方法是将 * 替换为任何字符的正则表达式。但我不确定选择的 SQL 或 LINQ 代码应该是什么。

你们有什么想法吗?

【问题讨论】:

    标签: c# asp.net sql regex linq


    【解决方案1】:

    除非我遗漏了一些明显的东西,否则这应该只需要一个简单的LIKE 查询。

    SELECT *
    FROM YourTable
    WHERE URL LIKE 'http://example.com/users/%/'
    

    正则表达式在 SQL 查询中是多余且棘手的。

    注意:% 字符相当于 SQL 表达式中的 * 通配符。

    如果您想使用 LINQ 并且只针对 SQL Server,您可以使用以下语法:

    var results =
            from yt in YourTable
            where SqlMethods.Like(yt.URL, "http://example.com/users/%/")
            select yt;
    

    【讨论】:

    • 在 linq 中是否有一种简单的方法可以做到这一点?似乎他们只有开头、包含等...
    【解决方案2】:

    就像点赞一样简单,但是将 * 字符替换为 % 字符,因为它是 T-SQL 使用的通配符(我假设您在 SQL Server 上,因为这是 C# 和 Linq 相关的)

    SELECT * 
    FROM YourTable
    WHERE @TheUrlIWantToMatch LIKE REPLACE(URL, '*', '%')
    

    【讨论】:

    • Like 不是这样工作的。在 LIKE 关键字之前的表达式中不能有通配符。
    • 糟糕,我把它们的顺序弄错了。我编辑了它谢谢你指出这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    相关资源
    最近更新 更多