假设我有一个任意字符串(例如“AABCC”),并且我想获取 [col] 等于带有任何前缀的该字符串的每一行。在那种情况下,我会这样做:
SELECT * FROM table WHERE [col] LIKE '%AABCC';
在我的示例中,我会得到诸如“EEEAABCC”之类的匹配项。
现在我想做相反的事情。我想在我的字符串等于带有任何前缀的 [col] 处获得匹配项:
例如,我想获取 [col] 为“BCC”、“ABCC”等的行。
我该怎么做?
假设我有一个任意字符串(例如“AABCC”),并且我想获取 [col] 等于带有任何前缀的该字符串的每一行。在那种情况下,我会这样做:
SELECT * FROM table WHERE [col] LIKE '%AABCC';
在我的示例中,我会得到诸如“EEEAABCC”之类的匹配项。
现在我想做相反的事情。我想在我的字符串等于带有任何前缀的 [col] 处获得匹配项:
例如,我想获取 [col] 为“BCC”、“ABCC”等的行。
我该怎么做?
听起来您想要任何与字符串最右边部分匹配的列的整个长度:
SELECT col FROM tbl
WHERE col LIKE RIGHT('rrrabcd', LENGTH(col))
(此查询的性能将非常糟糕,因为它必须计算每一行的表达式。如果您经常对大量数据执行此操作,您可能需要重新考虑您的问题。)
SELECT * FROM NAMES WHERE
SUBSTR('AABBCC', LENGTH('AABBCC') - LENGTH(Name) + 1, LENGTH(Name)) = Name;
笔记:
替换SUBSTR
为SUBSTRING
, 或MID
, 或您的 RDBMS 支持的任何内容。
替换LENGTH
为LEN
, 或STRLEN
, 或您的 RDBMS 支持的任何内容。
如果您想匹配 [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
;
这真的是你想要匹配的吗?
SELECT * FROM table WHERE 'CCBAA' like concat(reverse([col]), '%')