我试图替换文档中的状态缩写词的出现,当它们出现在单词“license”(并且没有其他地方)之前,并带有“State”一词
我可以找到它们:
Select FieldA where regexp '(AL|AK|AZ|..|WI|WY) License'
显然,如果我愿意,我可以替换'许可',但我想替换状态名,实际上我想摆脱它)。我以为我可以使用Locate来找到那个位置并使用mid(
)`但是里面的正则表达式无效:
Select Locate((regexp '(AL|AK|AZ|..|WI|WY) License'),FieldA)
那么是否有一些方法可以使用Locate所以我基本上可以在“许可证”之前找到(总是)2个字母的缩写,并用不同的字符串替换它?
答案 0 :(得分:0)
好的,现在这是我的非正则表达式解决方案:
Replace(FIELD,Mid(FIELD,Locate('License',FIELD)-3,2),'State')
from Table where FIELD regexp '
[[:<:]](AL|AK|AZ|AR|...|WY)[[:>:]] License';
尽管对这个问题的Regex特定解决方案有点不合适但是无论如何都要解决它的价值,我也应用了相同但通过更复杂的解决方案来替换完整状态,因为它们的可变长度更难: / p>
Replace(FIELD,mid(FIELD,((Locate('License',FIELD)-1) –
(CHAR_LENGTH(substring_index(left(FIELD,Locate('License',FIELD)-2),' ',-1))+1))+1,
((CHAR_LENGTH(substring_index(left(FIELD,Locate('License',FIELD)-2),' ',-1))+1))),'')
from TABLE where FIELD regexp '(Alabama|Alaska|Arizona|…|Wyoming)) License';