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