【问题标题】:Obtain first name, last name with unknown number of space获取名字,姓氏,空格数未知
【发布时间】:2013-10-08 01:26:24
【问题描述】:

我是 VB.NET 编程的新手,但我必须在我的程序中做一个研究栏。实际上,搜索栏正在寻找名字或姓氏(如果名字或姓氏有空间它正在工作)但如果我想同时搜索两者,我该如何构建我的 sql 查询?我不知道用户是否会将名字放在首位或姓氏放在首位。我尝试的是在有空格的情况下拆分名字,但如果这个人的名字像“小罗伯特唐尼”,我怎么知道空格的哪一部分是名字或姓氏?

所以,

  • 如何为此任务构建我的 sql 查询?
  • 我如何知道空间的哪一部分是名字或姓氏?

实际的正则表达式

' value of query = "% + search bar + %" for sql LIKE parameter    
Regex.IsMatch(query, "^'%(\w+ \w+)+%'$")

我如何检测名字和姓氏

Dim name As String = query.ToString.Substring(2, query.Length - 4)
Dim nameParts As String() = name.Split(" ")
'So nameParts(0) = "robert", nameParts(1) = "downey" and namePart(2) = "junior"

实际的 sql 选择器

SELECT id, firstName, lastName 
FROM beneficiaire 
WHERE LOWER(lastName) LIKE '%robert downey junior%' 
   OR LOWER(firstName) LIKE '%robert downey junior%'

【问题讨论】:

  • 没有办法进行这种区分(即使是人也无法分辨)。您必须设置输入规则。例如:逗号表示“姓氏”、“姓名”;没有逗号表示“姓名”“姓氏”。如果您有两个以上的元素,则必须为中间名等设置其他规则。没有约束,您的问题将无法解决。在任何情况下,都应该在某个地方引入输入,并且应该对给定的输入框进行充分标记。
  • 这正是我的第二个想法。感谢您的回复!
  • 从那里开始变得更加棘手。例如,小罗伯特唐尼的姓氏是什么?提示:它不包含字母 J 或 R。:)

标签: sql vb.net


【解决方案1】:
 CREATE PROCEDURE SEARCH( @SearchName VARCHAR(50)) AS

 DECLARE @name VARCHAR(52)
 SET '%' + @SearchName + '%'

 SELECT id, 
        firstName, 
        lastName 
 FROM   beneficiaire 
 WHERE  (
             LOWER(lastName) + ' ' + LOWER(firstName) LIKE @name
        )    OR
        (
             LOWER(firstName) + ' ' + LOWER(lastName) LIKE @name
        ) 

【讨论】:

    猜你喜欢
    • 2016-02-22
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    相关资源
    最近更新 更多