如何编写查询以通过拆分字段来选择行比较
Posted
技术标签:
【中文标题】如何编写查询以通过拆分字段来选择行比较【英文标题】:How to write a query to select a row comparing by spliting a field 【发布时间】:2012-08-27 01:18:58 【问题描述】:我有一个包含以下字段的表格
+-------------+----------+
| name | dob |
+-------------+----------+
名称: 字符串。包含名字和姓氏
出生日期: 日期:包含完整的出生日期
从表格中,我要求输入名字和出生月份的第一个字母。假设我从 Model.code
和 Model.BirthMonth
的模型中得到它们
我需要一个查询来匹配表中第一个字母名字的记录,为此我需要将字段分成多个部分作为名字和姓氏,并将Model.code
与名字的第一个字母进行比较。
我不知道如何编写这样的查询。
【问题讨论】:
为什么要拆分?假设名称按顺序包含“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>%'
以此类推,根据名称的格式。
【讨论】:
【参考方案2】:如果你的名字只是简单地连接为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
、条件语句和循环。
但如果是这种情况,您可能应该重新考虑数据库设计,并将名字和姓氏存储在不同的列中,因为大量使用字符串函数进行拆分通常意味着性能明显下降。
【讨论】:
以上是关于如何编写查询以通过拆分字段来选择行比较的主要内容,如果未能解决你的问题,请参考以下文章