度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 2345|回复: 2
打印 上一主题 下一主题

[分享] oracle规则表达式趣题 (转)

[复制链接]

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
跳转到指定楼层
楼主
发表于 2020-7-23 17:31:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我有一张表记录了我们系统的登录记录:谁在什么时间从哪个主机登录

create table plch_logins (
   when  timestamp(0) not null
, who   varchar2(10) not null
, host  varchar2(30) not null
)
/

insert into plch_logins values (
   timestamp '2016-02-01 10:00:10', 'John', '192.168.200.155'
)
/
insert into plch_logins values (
   timestamp '2016-02-01 10:01:20', 'Jill', '10.0.0.42'
)
/
insert into plch_logins values (
   timestamp '2016-02-01 10:02:30', 'Jack', 'pc42.plchhost.org'
)
/
insert into plch_logins values (
   timestamp '2016-02-01 10:03:40', 'Jeff', 'cubic.com10.net'
)
/
insert into plch_logins values (
   timestamp '2016-02-01 10:04:50', 'John', '192.168.200.155'
)
/
commit
/

有时候host是主机名字,有时候是IP地址。

我想知道每个主机的登录次数,但仅仅是对使用了IP地址的记录(而不是主机名字)。为此我有这个未完成的查询:

select host
     , count(*) logins
  from plch_logins
##REPLACE##
group by host
order by logins desc, host
/

哪些选项可用来取代##REPLACE##使得查询返回如下输出:

HOST                               LOGINS
------------------------------ ----------
192.168.200.155                         2
10.0.0.42                               1

(A)
where regexp_like(host, '^\d{1,3}(\.\d{1,3}){3}$')

(B)
where regexp_like(host, '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$')

(C)
where regexp_like(host, '^\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?$')

(D)
where regexp_like(
          host
        , '^[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.' ||
           '[[:digit:]]{1,3}\.[[:digit:]]{1,3}$'
       )

(E)
where regexp_substr(host, '^\d{1,3}(\.\d{1,3}){3}$') = host

(F)
where regexp_substr(host, '^\d{1,3}(\.\d{1,3}){3}$') is not null

(G)
where regexp_replace(host, '^\d{1,3}(\.\d{1,3}){3}$') is null

(H)
where instr(host, '.', 1, 1) between 2 and 4
   and instr(host, '.', 1, 2) between instr(host, '.', 1, 1) + 2
                                  and instr(host, '.', 1, 1) + 4
   and instr(host, '.', 1, 3) between instr(host, '.', 1, 2) + 2
                                  and instr(host, '.', 1, 2) + 4
   and instr(host, '.', 1, 3) >= length(host) - 3
   and instr(host, '.', 1, 4) = 0
   and regexp_replace(host, '[^0123456789.]') = host

(I)
where instr(host, '.', 1, 1) between 2 and 4
   and instr(host, '.', 1, 2) between instr(host, '.', 1, 1) + 2
                                  and instr(host, '.', 1, 1) + 4
   and instr(host, '.', 1, 3) between instr(host, '.', 1, 2) + 2
                                  and instr(host, '.', 1, 2) + 4
   and instr(host, '.', 1, 3) >= length(host) - 3
   and instr(host, '.', 1, 4) = 0
   and translate(
          host
        , '#' || translate(host, '#0123456789.', '#')
        , '#'
       ) = host   

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

348

主题

3572

帖子

9327

积分

论坛元老

Rank: 8Rank: 8

积分
9327
沙发
发表于 2020-7-23 18:06:08 | 只看该作者
有点高深

点评

慢慢看看总能看懂的  详情 回复 发表于 2020-7-24 13:17
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
板凳
 楼主| 发表于 2020-7-24 13:17:14 | 只看该作者

慢慢看看总能看懂的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-24 07:15 , Processed in 0.121096 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表