【问题标题】:SQL: Query where variable is suffix of field and viceversaSQL:查询变量是字段的后缀,反之亦然
【发布时间】:2017-02-05 16:47:09
【问题描述】:

假设我有一个任意字符串(例如 'AABCC'),并且我想获取 [col] 等于带有任何前缀的该字符串的每一行。在那种情况下,我会这样做:

SELECT * FROM table WHERE [col] LIKE '%AABCC';

在我的示例中,我会得到“EEEAABCC”等匹配项。

现在我想做相反的事情。我想在我的字符串等于带有任何前缀的 [col] 处获得匹配项:

例如,我想获取 [col] 为“BCC”、“ABCC”等的行。

我该怎么做?

【问题讨论】:

  • 您能澄清一下您要匹配的内容吗?您的两个示例是目标字符串的 子字符串,完整的匹配列表是“C”、“CC”、“BCC”、“ABCC”和“AABCC”,但我不要认为这是你真正追求的。你能帮帮我们吗?
  • 如果您的意思是“[col] 是我的字符串加上任何后缀”,它会是 where [col] like 'AABCC%',但您似乎正在寻找其他东西?
  • 好的,我应该说我的字符串加上任何前缀。我将对其进行编辑。

标签: sql expression suffix


【解决方案1】:

听起来您想要任何与字符串最右边部分匹配的列的整个长度:

SELECT col FROM tbl
WHERE col LIKE RIGHT('rrrabcd', LENGTH(col))

(此查询的性能将非常糟糕,因为它必须计算每一行的表达式。如果您经常对大量数据执行此操作,则可能需要重新考虑您的问题。)

【讨论】:

    【解决方案2】:
    SELECT * FROM NAMES WHERE 
      SUBSTR('AABBCC', LENGTH('AABBCC') - LENGTH(Name) + 1, LENGTH(Name)) = Name;
    

    注意事项:

    • SUBSTR 替换为 SUBSTRINGMID 或您的 RDBMS 支持的任何内容。

    • LENGTH 替换为 LENSTRLEN 或您的 RDBMS 支持的任何内容。

    【讨论】:

    • 谢谢。与安德鲁的答案有什么区别?它们看起来几乎一样
    • 是的,这两个答案非常相似。安德鲁的答案更好。 (前提是您的 RDBMS 具有 RIGHT() 函数。他们通常会这样做。但如果没有,那么您可以使用 SUBSTR()LENGTH() 模拟它,如我的回答所示。)
    【解决方案3】:

    如果您想匹配 [col] 的最后 N 个字符与目标字符串的最后 N 个字符相等,可以这样做:

    SELECT * FROM table 
    WHERE [col] like '%AABCC' --match on entire target string
    OR [col] like '%ABCC'     --match on last 4 chars of target string
    OR [col] like '%BCC'      --match on last 3 chars of target string
    OR [col] like '%CC'       --match on last 2 chars of target string
    OR [col] like '%C'        --match on last 1 char of target string
    ;
    

    这真的是你想要匹配的吗?

    【讨论】:

    • 嗯,是的,但字符串 'AABCC' 只是一个例子,它可以是任何东西。
    【解决方案4】:

    SELECT * FROM 表 WHERE 'CCBAA' like concat(reverse([col]), '%')

    【讨论】:

      猜你喜欢
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      相关资源
      最近更新 更多