将字符串数据库值与两个以上的单词进行比较

ben*_*ben 3 c# database sql-server asp.net-mvc

我的数据库中有一个用户表,其中包含"全名"字段

在我的工具上,我上传了一些文件,然后在数据库中插入数据之前,我通过比较数据库中的全名字段和文件上的全名字段来检查用户是否存在(这是唯一的选项,我无法比较ids).

我的问题是:当这些字段包含两个以上的字时,如何比较这些字段?

有时全名不符合规定,例如:

-------------------------------------------------
|        Database       ||         File         |
-------------------------------------------------
| Michael Yves Pierrot  || Pierrot Michael Yves |
| Martin Dupont         || Dupont Martin        |
| Ben Jack Dupont       || Ben Dupont Jack      |
-------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

当只有两个单词时,我就可以使用这样的分割:

public string getId()
{
    string result;
    QueryModel Query = new QueryModel();
    string sql = "SELECT Username_Id FROM USERNAME WHERE Full_name = '" 
        + Full_name.Replace("'", "''") + "'";
    result = Query.ExecuteCommand(sql, "int");
    if (result != "0")
    {
        string FullName2 = Full_name.Split(' ')[1] + " " + Full_name.Split(' ')[0];
        sql = "SELECT Username_Id FROM USERNAME WHERE Full_name = '" 
            + FullName2.Replace("'", "''") + "'";
        result = Query.ExecuteCommand(sql, "int");
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

注意当用户不存在时Query.ExecuteCommand(sql, "int");返回"0".

因此,如果我的函数getId()返回,"0"我将插入新用户,如果它返回其他内容,这意味着用户存在并将返回Username_Id

有人有想法吗?

谢谢.

use*_*620 5

你可以做下面的坏事(因为潜在的性能成本而坏):

SELECT Username_Id 
FROM USERNAME 
WHERE Full_name LIKE '%Michael%' AND Full_name LIKE '%Pierrot%'
Run Code Online (Sandbox Code Playgroud)

'%'运算符用于通配符.https://msdn.microsoft.com/en-us/library/ms189454.aspx

我也会参数化你的查询以防止SQL注入.