2

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

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

在我的示例中,我会得到诸如“EEEAABCC”之类的匹配项。

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

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

我该怎么做?

4

4 回答 4

2

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

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

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

于 2016-09-27T22:31:56.583 回答
1
SELECT * FROM NAMES WHERE 
  SUBSTR('AABBCC', LENGTH('AABBCC') - LENGTH(Name) + 1, LENGTH(Name)) = Name;

笔记:

  • 替换SUBSTRSUBSTRING, 或MID, 或您的 RDBMS 支持的任何内容。

  • 替换LENGTHLEN, 或STRLEN, 或您的 RDBMS 支持的任何内容。

于 2016-09-27T22:26:11.913 回答
0

如果您想匹配 [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
;

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

于 2016-09-27T22:21:08.087 回答
0

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

于 2016-09-27T23:09:54.217 回答