在Oracle SQL中分割和合并以生成IP地址

xj3cbfub  于 2023-05-16  发布在  Oracle
关注(0)|答案(2)|浏览(317)

Oracle SQL(PLSQL)我正在编写一个触发器,当table_a.ID上的列被更新时,table_b.IP将使用一个IP地址更新,该IP地址由ID(4位数字)拆分组成,其中前2位数字在第二个八位数中,后2位数字在第三个八位数中。
IP地址始终以以下开头:10.1,IP地址始终以68结尾
我知道如何连接字符串,但我不知道如何在同一声明中拆分和连接

Example:
| ID |
------
|0999|

IP地址应为10.109.99.68

Example:
| ID |
------
|6666|

IP地址应为10.166.66.68
等等

DECLARE
   IP_1 VARCHAR2(15) :=
gblwokeq

gblwokeq1#

您可以将整数ID转换为文本,然后使用串联:

SELECT '10.' || SUBSTR(LPAD(TO_CHAR(ID), 4, '0'), 1, 2) || '.' ||
                SUBSTR(LPAD(TO_CHAR(ID), 4, '0'), 3, 2) || '.68' AS ip
FROM yourTable;

请注意,我首先将ID转换为文本,然后在左填充零,使其长度为4。这种填充是必要的,因为整数实际上没有任何前导零。

∮ ∮ ∮ ∮

qgelzfjb

qgelzfjb2#

您可以使用数字格式将数字转换为字符串:

  • 使用0作为必填位置,如果存在,则用该位置上的数字填充,如果不存在,则为零。
  • 使用.(点)作为组分隔符,使用G作为组分隔符的占位符。
  • 使用字符串连接来构建结果。

注意:trim是必需的,因为第一个位置用空白(空格)填充-非负数的缺席符号。

select
  column_value,
  '10.1' || trim(to_char(column_value, '00G00', 'NLS_NUMERIC_CHARACTERS='' .''')) || '.68' as ip
from sys.odcinumberlist(
  12,
  123,
  1234,
  99,
  909,
  6666,
  6660
)
列值IP
十二岁10.100.12.68
一百二十三10.101.23.68
一二三四10.112.34.68
九九10.100.99.68
九零九10.109.09.68
六六六10.166.66.68
六六六10.166.60.68

fiddle

相关问题