ORACLE实现MySQL中inet_aton函数、inet_ntoa函数

数据库 专栏收录该内容
5 篇文章 0 订阅

MySQL

inet_aton函数

inet_aton(expr)

mysql> SELECT INET_ATON('192.168.1.88') address_number;
+----------------+
| address_number |
+----------------+
|     3232235864 |
+----------------+
1 row in set (0.00 sec)

上例中数字按照 192 × 25 6 3 + 168 × 25 6 2 + 1 × 25 6 1 + 88 × 25 6 0 192\times256^3 + 168\times256^2 + 1\times256^1 + 88\times256^0 192×2563+168×2562+1×2561+88×2560 进行计算。

inet_ntoa函数

inet_ntoa(expr)

mysql> SELECT INET_NTOA(3232235864) address;
+--------------+
| address      |
+--------------+
| 192.168.1.88 |
+--------------+
1 row in set (0.00 sec)

ORACLE实现

inet_aton函数

CREATE OR REPLACE FUNCTION inet_aton( f_address IN varchar2 ) RETURN number 
AS 
    o_address_number number;
BEGIN

	SELECT
      to_number(regexp_replace(f_address, '([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})', '\1')) * 16777216 +
      to_number(regexp_replace(f_address, '([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})', '\2')) * 65536 +
      to_number(regexp_replace(f_address, '([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})', '\3')) * 256 +
      to_number(regexp_replace(f_address, '([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})', '\4')) INTO o_address_number;
		
	RETURN o_address_number;
	
END inet_aton;

inet_ntoa函数

CREATE OR REPLACE FUNCTION inet_ntoa( f_address_number IN number ) RETURN varchar2 
AS 
    o_address varchar2;
BEGIN
		
	SELECT trunc ( f_address_number / 16777216 ) || '.' || trunc ( MOD ( f_address_number, 16777216 ) / 65536 ) || '.' || trunc ( MOD ( f_address_number, 65536 ) / 256 ) || '.' || trunc ( MOD ( f_address_number, 256 ) ) INTO o_address;
		
	RETURN o_address;
	
END inet_ntoa;
  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值