如何在 T-SQL 中专门使用 LIKE 查找特定符号+字符组合
How do I find specific symbol+character combo in T-SQL specifically using LIKE
我有一些杂乱的数据需要清理,并且在其他模式匹配中,我正在尝试删除任何类似的内容:'-c[^ROAEH]'。
从另一个类似的问题,我试过:
SELECT *
FROM #AcctKeysInt
WHERE NewCustName LIKE '[!-c][^ROAEH]'
ESCAPE '!'
还有:
SELECT *
FROM #AcctKeysInt
WHERE NewCustName LIKE '[-c]%[^ROAEH]'
显然是常见的:
SELECT *
FROM #AcctKeysInt
WHERE NewCustName LIKE '[-]c[^ROAEH]'
和
SELECT *
FROM #AcctKeysInt
WHERE NewCustName LIKE '%[-]c[^ROAEH]'
基本上,我无法设法将连字符包含到字符搜索中,因为我得到的返回结果没有特别以“-c”开头的字符串。
我已经对该数据进行了其他模式匹配清理,其中找到了'-',但是没有使用LIKE
运算符,所以我想知道是否有LIKE
是一种方法吗?
对于上下文,这里有一些其他模式匹配代码来清除我使用过的数据:
DROP TABLE IF EXISTS #AccountKeysCleansed;
SELECT strAcctNbrCurrent
,strAcctNbrHistoric
,strCustName
,CustNameOld
,GarbageOld
,IntCustName
,IntGarbage
,CASE WHEN CHARINDEX('- c', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('- c', IntCustName) - 1))
WHEN CHARINDEX('-cl', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('-cl', IntCustName) - 1))
WHEN CHARINDEX('*CAS', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('*CAS', IntCustName) - 1))
WHEN CHARINDEX('*CLOS', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('*CLOS', IntCustName) - 1))
WHEN CHARINDEX('* CLOS', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('* CLOS', IntCustName) - 1))
WHEN CHARINDEX('- cl', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('- cl', IntCustName) - 1))
WHEN CHARINDEX('*pend CLOSE', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('*pend CLOSE', IntCustName) - 1))
WHEN CHARINDEX('- To CLOSE', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('- To CLOSE', IntCustName) - 1))
WHEN CHARINDEX('-To CLOSE', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('-To CLOSE', IntCustName) - 1))
WHEN CHARINDEX('-=CLOSE', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('-=CLOSE', IntCustName) - 1))
WHEN CHARINDEX('(CLOSE',IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('(CLOSE', IntCustName) - 1))
WHEN CHARINDEX('*deceas',IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('*deceas', IntCustName) - 1))
WHEN CHARINDEX('-deceas',IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('-deceas', IntCustName) - 1))
WHEN CHARINDEX('*legal',IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('*legal', IntCustName) - 1))
WHEN IntCustName LIKE '*%' THEN RIGHT(IntCustName, LEN(IntCustName) - 1)
ELSE IntCustName END NewCustName
,CASE WHEN CHARINDEX('- c', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('- c', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('-cl', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('-cl', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('*CAS', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('*CAS', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('*CLOS', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('*CLOS', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('* CLOS', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('* CLOS', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('- cl', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('- cl', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('*pend CLOSE', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('*pend CLOSE', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('- To CLOSE', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('- To CLOSE', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('-To CLOSE', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('-To CLOSE', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('-=CLOSE', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('-=CLOSE', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('(CLOSE', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('(CLOSE', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('*deceas',IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('*deceas', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('-deceas',IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('-deceas', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('*legal',IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('*legal', IntCustName) + 1) + IntGarbage
WHEN IntCustName LIKE '*%' THEN '*' + IntGarbage
ELSE IntGarbage END newGarbage
INTO #AccountKeysCleansed
FROM #AccountKeysInt;
举个例子,我试图清除的一些用户名的名称如下:
- “名字姓氏-cro”
- “随机名称 cah”
- “RandomName-caird”
- “姓名-通用-姓氏-coh”
... 等等。所以我希望 SQL 找到“-c[ROAEH]”,然后将“-”右边的任何内容添加到(列)垃圾堆中。
你知道我如何使用 LIKE
运算符做到这一点吗?
您似乎在寻找模式“%-c[roaeh]%”
SELECT *
FROM #AcctKeysInt
WHERE NewCustName LIKE '%-c[roaeh]%'
这种模式也适用于 PATINDEX
PATINDEX('%-c[roaeh]%', IntCustName)
我有一些杂乱的数据需要清理,并且在其他模式匹配中,我正在尝试删除任何类似的内容:'-c[^ROAEH]'。
从另一个类似的问题,我试过:
SELECT *
FROM #AcctKeysInt
WHERE NewCustName LIKE '[!-c][^ROAEH]'
ESCAPE '!'
还有:
SELECT *
FROM #AcctKeysInt
WHERE NewCustName LIKE '[-c]%[^ROAEH]'
显然是常见的:
SELECT *
FROM #AcctKeysInt
WHERE NewCustName LIKE '[-]c[^ROAEH]'
和
SELECT *
FROM #AcctKeysInt
WHERE NewCustName LIKE '%[-]c[^ROAEH]'
基本上,我无法设法将连字符包含到字符搜索中,因为我得到的返回结果没有特别以“-c”开头的字符串。
我已经对该数据进行了其他模式匹配清理,其中找到了'-',但是没有使用LIKE
运算符,所以我想知道是否有LIKE
是一种方法吗?
对于上下文,这里有一些其他模式匹配代码来清除我使用过的数据:
DROP TABLE IF EXISTS #AccountKeysCleansed;
SELECT strAcctNbrCurrent
,strAcctNbrHistoric
,strCustName
,CustNameOld
,GarbageOld
,IntCustName
,IntGarbage
,CASE WHEN CHARINDEX('- c', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('- c', IntCustName) - 1))
WHEN CHARINDEX('-cl', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('-cl', IntCustName) - 1))
WHEN CHARINDEX('*CAS', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('*CAS', IntCustName) - 1))
WHEN CHARINDEX('*CLOS', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('*CLOS', IntCustName) - 1))
WHEN CHARINDEX('* CLOS', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('* CLOS', IntCustName) - 1))
WHEN CHARINDEX('- cl', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('- cl', IntCustName) - 1))
WHEN CHARINDEX('*pend CLOSE', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('*pend CLOSE', IntCustName) - 1))
WHEN CHARINDEX('- To CLOSE', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('- To CLOSE', IntCustName) - 1))
WHEN CHARINDEX('-To CLOSE', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('-To CLOSE', IntCustName) - 1))
WHEN CHARINDEX('-=CLOSE', IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('-=CLOSE', IntCustName) - 1))
WHEN CHARINDEX('(CLOSE',IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('(CLOSE', IntCustName) - 1))
WHEN CHARINDEX('*deceas',IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('*deceas', IntCustName) - 1))
WHEN CHARINDEX('-deceas',IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('-deceas', IntCustName) - 1))
WHEN CHARINDEX('*legal',IntCustName) > 0 THEN TRIM(LEFT(IntCustName, CHARINDEX('*legal', IntCustName) - 1))
WHEN IntCustName LIKE '*%' THEN RIGHT(IntCustName, LEN(IntCustName) - 1)
ELSE IntCustName END NewCustName
,CASE WHEN CHARINDEX('- c', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('- c', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('-cl', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('-cl', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('*CAS', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('*CAS', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('*CLOS', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('*CLOS', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('* CLOS', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('* CLOS', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('- cl', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('- cl', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('*pend CLOSE', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('*pend CLOSE', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('- To CLOSE', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('- To CLOSE', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('-To CLOSE', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('-To CLOSE', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('-=CLOSE', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('-=CLOSE', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('(CLOSE', IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('(CLOSE', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('*deceas',IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('*deceas', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('-deceas',IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('-deceas', IntCustName) + 1) + IntGarbage
WHEN CHARINDEX('*legal',IntCustName) > 0 THEN RIGHT(IntCustName, LEN(IntCustName) - CHARINDEX('*legal', IntCustName) + 1) + IntGarbage
WHEN IntCustName LIKE '*%' THEN '*' + IntGarbage
ELSE IntGarbage END newGarbage
INTO #AccountKeysCleansed
FROM #AccountKeysInt;
举个例子,我试图清除的一些用户名的名称如下:
- “名字姓氏-cro”
- “随机名称 cah”
- “RandomName-caird”
- “姓名-通用-姓氏-coh” ... 等等。所以我希望 SQL 找到“-c[ROAEH]”,然后将“-”右边的任何内容添加到(列)垃圾堆中。
你知道我如何使用 LIKE
运算符做到这一点吗?
您似乎在寻找模式“%-c[roaeh]%”
SELECT *
FROM #AcctKeysInt
WHERE NewCustName LIKE '%-c[roaeh]%'
这种模式也适用于 PATINDEX
PATINDEX('%-c[roaeh]%', IntCustName)