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

Posted

技术标签:

【中文标题】如何编写查询以通过拆分字段来选择行比较【英文标题】:How to write a query to select a row comparing by spliting a field 【发布时间】:2012-08-27 01:18:58 【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

为什么要拆分? 字段中的逻辑顺序 是否始终相同? 【参考方案1】:

假设名称按顺序包含“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-lastLIKE 会这样做。例如,要获取(名字)以'C' 开头的所有行:

SELECT * FROM tbl WHERE name LIKE 'C%'

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

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

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

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

【讨论】:

以上是关于如何编写查询以通过拆分字段来选择行比较的主要内容,如果未能解决你的问题,请参考以下文章

如何将值字段拆分为水晶报表中的更多字段?

如何编写查询以在 django 的 json 字段中查找值

根据字段进行查询以将行拆分为 x 行

kettle如何实现拆分字段

如何根据oracle plsql中列中的逗号分隔值拆分选择查询行

如何编写子查询以动态地从未确定的表中获取相同的字段