【问题标题】:Like operator in SQL alternative in C#C# 中 SQL 替代中的 Like 运算符
【发布时间】:2017-06-16 23:59:06
【问题描述】:

我正在尝试检查是否在某个消息之后输入了任何字符串 我确实在 SQL 中有一个工作版本,我想在 C# 中使用几乎相同的版本

在 SQL 中的用法:

        ELSE IF @Msg LIKE '/Message %'

在 C# 中的用法:

        else if (Msg == "/Message ")

我希望该工具检查是否在 /Message 之后输入了任何字符串。

提前致谢:)

【问题讨论】:

  • C# Version Of SQL LIKE的可能重复
  • 我不想在字符串中搜索字符串。我想读取任何可能输入的字符串
  • 您是否已经熟悉string.StartsWith()string.Contains()string.EndsWith()
  • 我不明白这两个问题有何不同。您想测试Msg 是否包含"/Message " 后跟任意文本,并可选择检索并处理该任意文本?链接的问题以及the many other duplicates or near-duplicates 提供了如何做到这一点的构建块。最好通过正则表达式而不是 SQL 来看待这个问题,因为这可能是解决方案可能涉及的内容(如果不是基本的 string 方法 @RufusL 注释)。
  • 您需要哪些特定的 LIKE 功能?见docs.microsoft.com/en-us/sql/t-sql/language-elements/…。我假设你需要 % 但你需要 _ 支持吗? [] 支持? [^] 支持?等等等等

标签: c#


【解决方案1】:

您可以使用以下string 函数:

var Msg = "A message to check";

对于LIKE 'SomeText%'

if (Msg.StartsWith("SomeText"))

对于LIKE '%SomeText'

if (Msg.EndsWith("SomeText"))

对于LIKE '%SomeText%'

if (Msg.Contains("SomeText"))

【讨论】:

    【解决方案2】:

    这是 TSQL LIKE 关键字的工作原理。


    using System;
    
    namespace SqlLike
    {
        class Program
        {
            static void Main(string[] args)
            {
                var findMe = "ABCHelloXYZ";
    
                // LIKE '......%'
                if (findMe.StartsWith("ABC"))
                {
                    Console.WriteLine("Yay");
                }
    
                // LIKE '%......'
                if (findMe.EndsWith("XYZ"))
                {
                    Console.WriteLine("Woohoo");
                }
    
                // LIKE '%......%'
                if (findMe.Contains("Hello"))
                {
                    Console.WriteLine("JackPot!!");
                }
    
                Console.ReadLine();
            }
        }
    }
    

    【讨论】:

    • 您注释掉的行是向后的。 findMe.StartsWith("....")LIKE '....%' 相同,findMe.EndsWith("....")LIKE '%....' 相同
    • "#Hello%"; 不应该是"%Hello%";吗?
    • @mjwills 我不应该用 % 作为例子。我已经更新以更好地说明我的意思。
    • 如果“aaa%bbb%ccc%ddd”怎么办?
    【解决方案3】:

    您的要求有点模糊,但这应该可以帮助您实现(根据需要进行一些调整)。

    String Msg = "/Message somethingelse";
            if (Msg.Contains("/Message ") && (Msg.Length > 9) )
            {
                String str = Msg.Substring(9);
                Console.Write("str: " + str);
            }
    

    正如@Scott 建议的那样,您也可以使用:

    if (Msg.StartsWith("/Message ") && (Msg.Length > 9))
            {
                String str = Msg.Substring(9);
                Console.Write("str: " + str);
            }
    

    【讨论】:

    • 这也将匹配具有文本 before "/Message" 的字符串
    • 是的,正如我所说,要求有点模糊,但希望足以让 Crepitus 继续前进
    • 要求使代码的行为类似于@Msg LIKE '/Message %',您的示例行为类似于@Msg LIKE '%/Message %'。您需要 StartsWith 而不是 Contains
    • 另外提交的sql表示字符串总是以“/Message”开头
    • 感谢@Scott Chamberlain,我会将您的建议添加到答案中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2018-03-20
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    相关资源
    最近更新 更多