【问题标题】:How to select rows in Teradata SQL based on complicated conditions in Teradata SQL?如何根据 Teradata SQL 中的复杂条件选择 Teradata SQL 中的行?
【发布时间】:2021-09-20 08:58:33
【问题描述】:

我在 Teradata SQL 中有如下表:

col1        col2 
Jan Kowal  | Jan Kowal PHU
Bravo JohN | GB John BraVo
Ann Still  | Ronald G

我只需要从上表中选择这些行,其中:

  1. 在 col2 中是来自 col1 的值 + 更多(不管之前还是之后)
  2. 请注意,Jan Kowal 和 Kowal Jan 是姓名和姓氏,可以交换
  3. 大小写 = False(不管字母是高还是小)

所以我只需要选择第一行和第二行:

col1          col2
Jan Kowal  | Jan Kowal PHU
Bravo JoHN  | GB John BraVo  
  • 因为两行的值都来自 col1 + col2 中的其他内容(之前或之后)
  • 字母大小写 = 假
  • name 和 surname 可以交换

【问题讨论】:

  • col1中的值总是2个字吗?

标签: sql teradata teradata-sql-assistant teradatasql


【解决方案1】:

您将第一列描述为具有“名称”和“姓氏”,这意味着它恰好有两个组成部分。

对于这个问题,strtok()可以帮忙:

where regexp_instr(col2, strtok(col1, ' ', 1), 'i') and
      regexp_instr(col2, strtok(col1, ' ', 2), 'i')

我在这里使用了正则表达式,因为它更容易修改你想要考虑的单词边界。您的问题不清楚是否有必要。

【讨论】:

  • 戈登第一栏不总是有 2 个字,你能修改你的答案吗?
  • @koler 。 . . “2”不是我编的。该问题明确将这两个组成部分称为“名称”和“姓氏”,非常强烈地暗示有两个。如果有一个已知的最大值,我会继续使用regexp_similar() 来处理它。但是,对于一般解决方案,您应该问另一个问题。
  • 请注意,您可能需要regexp_instr,因为regexp_similar 需要全字符串匹配。
  • @Fred 。 . .谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 2021-09-07
  • 2020-10-29
  • 2020-10-27
  • 2020-05-19
  • 1970-01-01
相关资源
最近更新 更多