powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Двойной CAST
3 сообщений из 3, страница 1 из 1
Двойной CAST
    #35495608
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Похоже постгрес при двойном касте преобразует из начального типа, сразу в конечный, минуя промежуточные типы :-( Пример, нужный именно мне, с INET, CIDR, VARCHAR
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
jelis=> select '192.168.10.2'::cidr;
      cidr
-----------------
  192 . 168 . 10 . 2 / 32 
( 1  row)

jelis=> select ('192.168.10.2'::cidr)::inet;
     inet
--------------
  192 . 168 . 10 . 2 
( 1  row)

jelis=> select (('192.168.10.2'::cidr)::inet)::varchar;
     varchar
-----------------
  192 . 168 . 10 . 2 / 32 
( 1  row)


В данном случае, INET от CIDR оилчаеться тем, что для хоста не пишет маску. Но при преобразованние явно еще раз к текстовому типу маска снова появляеться :-( Можно ли это както обойти, не сильно напрягаясь?
...
Рейтинг: 0 / 0
Двойной CAST
    #35495647
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jelis
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
jelis=> select ('192.168.10.2'::cidr)::inet;
     inet
--------------
  192 . 168 . 10 . 2 
( 1  row)

jelis=> select (('192.168.10.2'::cidr)::inet)::varchar;
     varchar
-----------------
  192 . 168 . 10 . 2 / 32 
( 1  row)


В данном случае, INET от CIDR оилчаеться тем, что для хоста не пишет маску. Но при преобразованние явно еще раз к текстовому типу маска снова появляеться :-( Можно ли это както обойти, не сильно напрягаясь?в первом случае Вы видите на экране не текст, а тип данных inet, во втором случае - Вы видите тип данных inet преобразованный в тип данных varchar (текст). и почему Вы решили что inet не пишет маску когда его приводят к тексту ? :)

Код: plaintext
1.
2.
3.
4.
seb=> select text('192.168.10.2'::inet);
      text
-----------------
  192 . 168 . 10 . 2 / 32 

вполне себе пишет.

попробуйте так:
Код: plaintext
1.
2.
3.
4.
seb=> select host(('192.168.10.2'::cidr)::inet);
     host
--------------
  192 . 168 . 10 . 2 

результат функции host - text
...
Рейтинг: 0 / 0
Двойной CAST
    #35495768
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёш
в первом случае Вы видите на экране не текст, а тип данных inet, во втором случае - Вы видите тип данных inet преобразованный в тип данных varchar (текст). и почему Вы решили что inet не пишет маску когда его приводят к тексту ? :)


Наверно поэтому и решил, что сам по себе тип inet маску /32 не пишет, а преобразовывая его в текст она, в самом деле, появляеться.

Ёш
Код: plaintext
1.
2.
3.
4.
seb=> select text('192.168.10.2'::inet);
      text
-----------------
  192 . 168 . 10 . 2 / 32 

вполне себе пишет.

попробуйте так:
Код: plaintext
1.
2.
3.
4.
seb=> select host(('192.168.10.2'::cidr)::inet);
     host
--------------
  192 . 168 . 10 . 2 

результат функции host - text

Спасиба! Немножко не то, так как хост вообще маску не пишет, но функция abbrev() именно то что надо, правда к inet всё равно в начале надо приводить.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
jelis=> select abbrev('192.168.10.0/32'::cidr::inet);
    abbrev
--------------
  192 . 168 . 10 . 0 
( 1  row)

jelis=> select abbrev('192.168.10.0/24'::cidr::inet);
     abbrev
-----------------
  192 . 168 . 10 . 0 / 24 
( 1  row)


З.Ы. Извините, что в доку я залез только после форума :-)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Двойной CAST
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]