Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

Вернуться   Форум программистов > Web > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 09.07.2018, 17:22   #1
wnyp
 
Регистрация: 20.03.2012
Сообщений: 6
Репутация: 10
По умолчанию Сравнение составных типов (PostgreSQL)

Создал составной тип:
Код:

CREATE TYPE public.full_code AS
(
	class smallint,
	subclass smallint,
	"group" character varying(2),
	subgroup character varying(2),
	sort character varying(2),
	subsort character varying(2)
);

Имеется таблица:
Код:

CREATE TABLE public."Documents"
(
    document_id integer NOT NULL,
    document_type_id integer NOT NULL,
    document_name text NOT NULL,
    document_short_name text,
    full_code full_code,
    path_file text);

Пытаюсь сделать такой запрос:
Код:

SELECT document_name FROM public."Documents" WHERE document_type_id = 1 AND full_code = (1,1,00,00,00,00)  ORDER BY document_id

и получаю ошибку: не удалось сравнить различные типы столбцов smallint и integer, столбец записи 1. SQL-состояние: 42804

Код:

SELECT document_name FROM public."Documents" WHERE document_type_id = 1 AND full_code = (1,1,'00','00','00','00')  ORDER BY document_id

то же пробовал. Результат такой же.

Запрос выполняется если делать так:
Код:

SELECT document_name 
FROM public."Documents" 
WHERE document_type_id = 1 AND (full_code).class = 1 and (full_code).subclass = 1 and (full_code).group = '00' and (full_code).subgroup = '00'
and (full_code).sort = '00' and (full_code).subsort = '00'
ORDER BY document_id

Существует ли компактный вариант для сравнения составных типов ?
wnyp вне форума   Ответить с цитированием
Старый 09.07.2018, 21:26   #2
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,107
Репутация: 6385
По умолчанию

а так:
Код:

full_code = (CAST ('1' AS smallint),CAST ('1' AS smallint),'00','00','00','00')

__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар на форуме   Ответить с цитированием
Старый 10.07.2018, 11:41   #3
wnyp
 
Регистрация: 20.03.2012
Сообщений: 6
Репутация: 10
По умолчанию

Так возникает ошибка: не удалось сравнить различные типы столбцов character varying и unknown, столбец записи 3. SQL-состояние: 42804
Работает вот так :

Код:

SELECT document_name FROM PUBLIC."Documents" WHERE document_type_id = 1 AND full_code = (1::SMALLINT,1::SMALLINT,'00'::VARCHAR ,'00'::VARCHAR,'00'::VARCHAR,'00'::VARCHAR) ORDER BY document_id

Или вот так:
Код:

SELECT document_name FROM public."Documents" WHERE document_type_id = 1 AND full_code = (CAST ('1' AS smallint),CAST ('1' AS smallint),CAST ('00' AS varchar),CAST ('00' AS varchar),CAST ('00' AS varchar),CAST ('00' AS varchar)) ORDER BY document_id

Додумал сам, спасибо за помощь! Но почему работает не понимаю.
wnyp вне форума   Ответить с цитированием
Старый 10.07.2018, 21:42   #4
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,107
Репутация: 6385
По умолчанию

Надо полагать, что требуется точное соответствие типов у полей. Это и предположил из сообщения об ошибке. И следующая ошибка тоже на это указывает. А вообще без понятия, с PostgreSQL не работаю, так что это только домыслы ))
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар на форуме   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В условие if не работает сравнение переменных с типов время avpdnepr C++ Builder 3 10.12.2015 15:19
Вложенность составных операторов александр_77777 Паскаль 32 14.11.2013 01:06
Сравнение signed и unsigned типов. 220Volt Общие вопросы C/C++ 23 12.10.2013 11:26
Сравнение типов Pamparam PHP 13 30.06.2012 23:56
Postgresql сравнение текущей даты и в столбце. tatysya Помощь студентам 0 03.07.2011 09:57


14:09.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru