【问题标题】:How to find a data in SQL Server with wrong blank space on the middle of it?如何在 SQL Server 中查找中间有错误空格的数据?
【发布时间】:2019-07-08 08:56:14
【问题描述】:

我想在我的数据库中搜索某个人(我的应用程序是用 c# 开发的,数据库是 Microsoft SQL server 2008)。

用户想查找这个名字“John Alan”:

  • 场景 1:用户输入“john alan”,没关系,我可以用我的 数据库上的 SP

  • 场景 2:用户输入“johnalan”,姓名和家庭之间没有空格

  • 场景 3:用户输入“joh nalan”,但空格位置错误

我对场景没有问题,但如何处理数字 2 和 3?

我在互联网上进行了一些搜索,但我不知道我究竟应该寻找什么,如果是技术或算法或某种 T-SQL 查询或 c# 代码,请给我一个名字或帮助我。

我的表格有两列:

Name       Family
-------   -------
john       alan

【问题讨论】:

  • 不能只用空白替换空格 - 例如其中替换(SomeColumn,'','')= @ValueWithoutSpaces
  • @chetan-ranpariya ,我看到一个非常简单的windows应用程序可以处理它而不使用AI
  • 在比较之前替换用户输入和姓名+家庭中的空格。
  • 你为什么不where Name + Family = replace(@input,' ', '')

标签: c# sql-server


【解决方案1】:

您可以通过从姓名和家庭中删除空格来做到这一点。 T-SQL Replace 将从您的字符串中删除特定的空格,如果用户使用 N 个空格,则使用 Replace 的解决方案将失败。以便您可以使用以下代码

  select   '"' + Concat(name,family) + '"', '"' + replace(Concat(name,family), ' ', '') + '"' AS nameandfamily 

更多信息请查看link

【讨论】:

    【解决方案2】:
    1. 我建议您删除 C# 中名称的空格。

       Regex.Replace(strFullName, @"\s+", "")
      
    2. 修改表以添加额外的持久化计算列以具有全名的 HASH 值,如下所示

    CREATE TABLE #family(name varchar(10), family varchar(20))
    
        INSERT INTO #family 
        values ('john','alan'), ('johnalan',''),('joh','nalan')
    
        ALTER TABLE #family
        ADD FullNamehash AS CHECKSUM(concat(LTRIM(RTRIM(name)), LTRIM(RTRIM(family))))  PERSISTED
    
    1. 编写一个存储过程,它接受 fullName 作为参数,返回如下所示的系列详细信息。你可以阅读更多关于CHECKSUM
    CREATE PROCEDURE ReturnFamilyDetails (@fullName VARCHAR(30))
        AS
        BEGIN
        DECLARE @hash_fullname int = CHECKSUM(@fullName)
        SELECT name,family from #family where fullNamehash = @hash_fullname
        END
    

    【讨论】:

      【解决方案3】:

      如果你只想搜索这个简单的场景 您可以连接 2 列并使用 LIKE 进行连接用户查询

      userquery = Regex.Replace(userquery, @"\s+", "").ToLower();
      ..
      where Regex.Replace(query.Name+query.Family, @"\s+", "").ToLower() LIKE userquery
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-26
        • 1970-01-01
        • 1970-01-01
        • 2011-02-02
        • 2010-10-26
        • 1970-01-01
        • 2014-07-31
        相关资源
        最近更新 更多