【问题标题】:SQL Returning names with multiple spacesSQL返回具有多个空格的名称
【发布时间】:2017-03-06 10:17:58
【问题描述】:

我希望在单个字段中返回所有包含多个空格的名称。 例如“约翰·保罗·史密斯”。使用 SQL Server Management Studio 2005

例如,我有一个包含名字和姓氏的患者表

我想返回在一个字段中包含示例“John Paul Smith”的所有名字。

给出的查询似乎适用于姓氏字段,但不适用于名字。我确定名字列具有这些类型的数据,但它没有返回任何结果。 骗子

【问题讨论】:

  • 您使用的是哪个 dbms? (答案可能是特定于产品的。)
  • 但是说真的,标记你的 DBMS
  • 对不起,我第一次在这个网站上发帖。我正在使用 SQL Server 管理工作室 2005。

标签: sql sql-server-2005


【解决方案1】:

甲骨文:

SELECT MyField
from MyTable
where REGEXP_INSTR (MyField, ' ', 1, 2, 0, 'i') > 0

SQL 服务器:

SELECT MyField
from MyTable
where CHARINDEX(' ', MyField, charindex(' ',MyField)+1) > 0

MySQL

select MyField
from MyTable
where length(SUBSTRING_INDEX(MyField, ' ', 2)) < length(MyField)

【讨论】:

  • 删除我的答案并为你投票!
  • 这有什么理由可以在一列而不是另一列上工作?似乎对 surname 列可以正常工作,但在 forename 上没有返回任何内容
  • @Conger88 如需更多帮助,请编辑问题并提供以下信息:示例数据、预期输出、DBMS
  • @JohnHC 更新为相同。我注意到姓氏列不允许空值,而名字列则允许。这会对查询产生影响吗?
  • 忽略我最后的cmets!第二个和第三个名字被放入新的列中。抱歉。感谢您的所有帮助
【解决方案2】:

在我看来,这里有两个解决方案比 JohnHC 的更容易阅读/理解。

  1. 再简单不过了。使用通配符搜索(至少)两个空格。

    SELECT * FROM your_table WHERE your_column LIKE '% % %';
    
  2. 替换空格后检查长度

    SELECT * FROM your_table WHERE LEN(your_column) - LEN(REPLACE(your_column, ' ', '')) >= 2;
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2013-10-23
    • 2013-07-13
    • 1970-01-01
    • 2011-05-20
    • 2015-05-27
    相关资源
    最近更新 更多