在SQL Server中,我有一个带有自由文本列的表,并试图在其中找到两个模式。第一个模式是一个关键字,比如" SSN ",下一个模式是在找到模式SSN之后的数字"123456789“。
我正在尝试查找关键字" SSN“和找到的关键字右侧某处的SSN编号的数据行(可以是”“、:、>、=、”"=“”、“is”等,将关键字与实际数字分隔开)。
列中的数据如下所示:
ID myColumn
----------------------------------------------------------------------------
1 Customer's account number is 098765432 and their SSN = 123456789
2 Move account 763894571 to 918384567 because the SSN has been updated我到处找,但真的找不到我要找的东西,希望这里有人能帮上忙。
我使用了以下查询:
SELECT ID, myColumn
FROM myTable
WHERE myColumn LIKE '% SSN%'
AND (myColumn LIKE '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%')我的目标是只看到ID1数据,因为ID2没有SSN后跟9位数字;但是它同时显示了两行。我怎么才能提取我正在寻找的数据呢?
发布于 2019-09-18 03:24:14
在两种情况下仅使用LIKE一次:
SELECT ID, myColumn
FROM myTable
WHERE myColumn like '% SSN%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%'请参阅demo。
结果:
> ID | myColumn
> -: | :---------------------------------------------------------------
> 1 | Customer's account number is 098765432 and their SSN = 123456789发布于 2019-09-18 03:28:00
我的目标是只看到ID1数据,因为ID2没有后面跟9位数字的SSN;但是它同时显示了两行。我怎么才能提取我正在寻找的数据呢?
您可以使用PATINDEX,它返回字符串中某个模式开始的字符位置。
例如,您可以使用PATINDEX('%SSN%',MyColumn)来获取可以在列中找到'SSN‘的字符位置。
您还可以使用它来查看字符串中是否存在PATINDEX高于'SSN‘的PATINDEX的9位数模式。
发布于 2019-09-18 03:10:31
像这样的东西可能会有帮助。
SELECT ID, myColumn, SUBSTRING(myColumn,CHARINDEX('SSN',myColumn,10), LEN(myColumn) )
from myTable WHERE
myColumn like '% SSN%'
AND EXISTS (SELECT * FROM myTable t where t.id = mytable.id
and SUBSTRING(myColumn,CHARINDEX('SSN',myColumn,10), LEN(myColumn) ) like '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%')https://stackoverflow.com/questions/57980483
复制相似问题