SUMSEN

Oracle&Sql爱好者,用友NC管理员

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

感谢newkid

WITH TAOBAO_WORDS AS ---淘宝体广告关键字集合表(可以任意添加)
 (SELECT '' AS WORD
    FROM DUAL
  UNION ALL
  SELECT '' AS WORD
    FROM DUAL
  UNION ALL
  SELECT '' AS WORD FROM DUAL)

SELECT *
  from (SELECT SUM(REGEXP_COUNT('亲,还在淘宝购物,赚钱', WORD)) 限度--这里的'亲,还在淘宝购物,赚钱'在实际中为后台数据库的评论字段
          FROM dual
          JOIN TAOBAO_WORDS
            ON INSTR('亲,还在淘宝购物,赚钱', WORD) > 0)--同上 其中WORD为上面淘宝体广告关键字集合
 WHERE 限度 >= 2 --外层嵌套了一个SELECT,可以对淘宝体广告文字出现次数进行控制

 2013-04-15 23:08:22 更新

1,首先建了淘宝体广告表

select * from taobao_ad

2,魅族应用中心评论模拟表

select * from mz_soft

3,sql如下,这里需要用group by 才能得到每行评论的广告字数量(newkid的话:你的里层应该带GROUP BY M.ID
假设你的M表有个主键叫做ID。)

select *
  from (SELECT m.users,
               m.comments,
               sum(REGEXP_COUNT(m.comments, t.words)) 限度
          FROM mz_soft m
          JOIN taobao_ad t
            ON INSTR(m.comments, t.words) > 0
         group by m.users, m.comments)
 where 限度 >=4

 

这里正常评论1和2没有出现,1没有出现是因为它的INSTR(m.comments, t.words) > 0就不满足,没有一个广告语,2是因为它的淘宝体数量才有3个(电,脑,电脑),不满足‘限度 >=4’。

4,下面是触发器,可以一劳永逸,不要每次查询来手工删除了,可以做到事前控制,广告评论发布的时候就不让保存

create or replace trigger ad
  before insert on mz_soft  
  for each row
declare
  -- local variables here
  counts integer;
begin
  select sum(REGEXP_COUNT(:new.comments, t.words)) into counts
          FROM mz_soft m
          JOIN taobao_ad t
            ON INSTR(:new.comments, t.words) > 0;
   if counts>=4 then
    raise_application_error(-20001,'用户:' ||:new.users||'你的评论含有大量广告用户,不能发布
    ,再次发布将会封ID!');
  
      end if;    
end ad;

 

可以看到这个评论‘诚聘:网上兼职、适合全职妈妈,上班族,大学生。有电脑’有9个淘宝体,可以明显的确定为广告(是否为广告可以通过外层的where条件限制)

至于报错之后,把用户id还可以传入到另外的表作为广告人的证据,下次再发就封杀,做到自动,这里就不写了

 

 

 结算中心20万信息化扣款

select *
  from (select b.interestdate,
               a.accidcode,
               a.accidname,
               b.summary,
               trunc(b.debitamount,2)debit,  --round(b.debitamount,2)debit,
               trunc(b.creditamount,2)credit,-- to_char(debitamount,'999,999,999.00')debit,
               b.pk_account,
               b.pk_voucher,
               count(distinct b.pk_account) over(partition by b.pk_voucher, b.interestdate) rn
          from fts_voucher_b b, bd_accid a
         where b.pk_account = a.pk_accid
           and b.summary not like '%0.4%'  --去除外进证0.4%
           and b.summary not like '%科技创新%' --去除科技创新风险
           and substr(interestdate,1,4)>='2012' --信息化扣款从2012年开始
           and b.pk_account <> '1162N51000000000032B') -- 结算中心 '1162N51000000000032B' 总部 '1162N51000000000032C'
 where pk_voucher in(select pk_voucher from fts_voucher_b where pk_account='1162N51000000000032C')
    and  debit =200000
   and rn >= 2
   order by substr(interestdate,1,4), accidcode -- to_char(to_date(interestdate,'yyyy-mm-dd'),'yyyy')
 

 

 

 

posted on 2013-04-12 14:17  sumsen  阅读(687)  评论(0编辑  收藏  举报