我有一个包含以下字段的表
+-------------+----------+
| name | dob |
+-------------+----------+
名称:字符串。包含名字和姓氏
dob:日期:包含完整的出生日期
从表格中,我要求姓名和出生月份的第一个字母。假设我从模型Model.code
和Model.BirthMonth
我需要一个查询来匹配表中的记录和第一个字母的名字,为此我需要将字段拆分为多个部分作为名字和姓氏,并将Model.code
与第一个字母的第一个字母进行比较名。
我不知道如何编写这样的查询。
答案 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涉及SUBSTRING
,CHARINDEX
条件语句和循环。
但如果是这种情况,您应该重新考虑数据库设计,并将名字和姓氏存储在不同的列中,因为大量使用字符串函数进行拆分通常意味着性能明显下降。