使用 PatIndex 获取子字符串的第二次出现

getting the second occurrence of a substring with PatIndex

通过这个查询,我从一个地址获取了邮政编码并且它有效,但在某些情况下地址号码的长度是 5,所以我得到这个而不是邮政编码,是否有机会获得PatIndex 最后一次出现?

SELECT address,IIF((PatIndex('%[0-9][0-9][0-9][0-9][0-9]%', address)>0), substring(address, PatIndex('%[0-9][0-9][0-9][0-9][0-9]%', address), 5) , NULL) AS postalCode
from table 

如果你想得到最后一次出现

  1. 反向地址
  2. 在反向地址中找到第一个匹配项 PatIndex
  3. 反转第一个匹配的子串

因此

SELECT address,IIF((PatIndex('%[0-9][0-9][0-9][0-9][0-9]%', address)>0), reverse(substring(reverse(address), PatIndex('%[0-9][0-9][0-9][0-9][0-9]%', reverse(address)), 5)) , NULL) AS postalCode
from tbl

Run with db<>fiddle