如何从mysql中的字符串中选择一个精确的子字符串而不是另一个?

时间:2015-08-04 15:59:29

标签: mysql regex

我在mysql的属性中存储了以下条目:

  

BFA.AD

     

一个:11:{I:0; S:6:" BFA.AD&#34 ;; I:1; S:11:" BFA.AD.COPY&#34 ;; I: 2; S:6:" BFA.AE&#34 ;; I:3; S:6:" BFA.TC&#34 ;; I:4; S:6:" BFA。 FA&#34 ;; I:5; S:6:" BFA.GC&#34 ;; I:6; S:6:" BFA.IL&#34 ;; I:7; S:6 :" BFA.IN&#34 ;; I:8; S:6:" BFA.PH&#34 ;; I:9; S:6:" BFA.PR&#34 ;; I:10; S:6:" BFA.TR&#34 ;;}

     

BFA.AD.COPY

     

BFA.TR

我正在尝试编写符合以下条件的语句: 当记录包含BFA.AD或正好是BFA.AD时,则其他为0。

因此,使用上面列出的四个记录,结果应该是1,1,0和0。

我试过了:

case when (select m.meta_value from `ccsadm_frm_item_metas` m where m.item_id = i.id and m.field_id = 1308) like '%BFA.AD%' then 1 else 0 end as 'BFA.AD', 

将BFA.AD和BFA.AD.COPY标记为1.我尝试使用正则表达式["]\bBFA.AD\b["],但这似乎不适用于MySQL。

2 个答案:

答案 0 :(得分:0)

case when (select m.meta_value 
            from `ccsadm_frm_item_metas` m 
            where m.item_id = i.id 
            and m.field_id = 1308) 
                like 'BFA.AD' then 1 else 0 
                end as 'BFA_Type',

OR

case when (select m.meta_value 
            from `ccsadm_frm_item_metas` m 
            where m.item_id = i.id 
            and m.field_id = 1308) 
                like 'BFA.AD' then 1 else 0 
                end as 'BFA.AD',
case when (select m.meta_value 
            from `ccsadm_frm_item_metas` m 
            where m.item_id = i.id 
            and m.field_id = 1308) 
                like 'BFA.AD.COPY' then 1 else 0 
                end as 'BFA.AD.COPY',

答案 1 :(得分:0)

我认为我找到了一个适用于我在这个特定情况下所需要的解决方案:

case when (select i.form_id = 193) then case when (select m.meta_value from `ccsadm_frm_item_metas` m where m.item_id = i.id and m.field_id = 1308) regexp 'BFA.AD["]' or (select m.meta_value from `ccsadm_frm_item_metas` m where m.item_id = i.id and m.field_id = 1308) = 'BFA.AD' then 1 else 0 end

所以,到目前为止,它似乎正在发挥作用。感谢大家的帮助,因为你让我想到了其他一些我还没有尝试的选择。