使用Locate和/。或regex替换?

时间:2016-05-31 00:53:24

标签: mysql replace

我试图替换文档中的状态缩写词的出现,当它们出现在单词“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个字母的缩写,并用不同的字符串替换它?

1 个答案:

答案 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';