如何编写查询以通过拆分字段来选择行比较

时间:2012-08-27 01:18:58

标签: sql sql-server vb.net

我有一个包含以下字段的表

+-------------+----------+
|    name     |   dob    |
+-------------+----------+

名称:字符串。包含名字和姓氏

dob:日期:包含完整的出生日期

从表格中,我要求姓名和出生月份的第一个字母。假设我从模型Model.codeModel.BirthMonth

获取它们

我需要一个查询来匹配表中的记录和第一个字母的名字,为此我需要将字段拆分为多个部分作为名字和姓氏,并将Model.code与第一个字母的第一个字母进行比较名。

我不知道如何编写这样的查询。

2 个答案:

答案 0 :(得分:0)

假设该名称包含该顺序中的“firstname lastname”,则查询将为

SELECT * FROM users
WHERE
    name LIKE '<model.code.passed.as.parameter>%'
AND DATEPART(mm, date) = <model.month.passed.as.parameter>

如果名称采用“姓氏,名字”格式,则WHERE条件为

    name LIKE '%, <model.code.passed.as.parameter>%'

等等,基于名称的格式。

答案 1 :(得分:0)

如果您的姓名简单地连接为first-space-last,则LIKE会执行此操作。例如,要获取(第一个)名称以'C'开头的所有行:

SELECT * FROM tbl WHERE name LIKE 'C%'

如果您的名称字符串格式为last-comma-space-first,并且最后/第一个分隔符保证是字符串中唯一的逗号:

SELECT * FROM tbl WHERE name LIKE '%, C%'

任何其他情况都需要更复杂的内容,可能是user-defined function涉及SUBSTRINGCHARINDEX条件语句和循环。

但如果是这种情况,您应该重新考虑数据库设计,并将名字和姓氏存储在不同的列中,因为大量使用字符串函数进行拆分通常意味着性能明显下降。