0

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

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

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

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

从表格中,我要求输入名字和出生月份的第一个字母。假设我从模型中得到Model.code它们Model.BirthMonth

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

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

4

2 回答 2

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>%'

等等,基于名称的格式。

于 2012-08-27T02:30:41.320 回答
0

如果您的名字只是简单地连接为first-space-last,LIKE会这样做。例如,要获取(第一个)名称以 开头的所有行'C'

SELECT * FROM tbl WHERE name LIKE 'C%'

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

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

任何其他情况都需要更复杂的东西,可能是用户定义的函数,包括SUBSTRING, CHARINDEX, 条件语句和循环。

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

于 2012-08-27T02:30:45.463 回答