Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2018, 16:22   #1
wnyp
 
Регистрация: 20.03.2012
Сообщений: 6
По умолчанию Сравнение составных типов (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, 20:26   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

а так:
Код:
full_code = (CAST ('1' AS smallint),CAST ('1' AS smallint),'00','00','00','00')
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.07.2018, 10:41   #3
wnyp
 
Регистрация: 20.03.2012
Сообщений: 6
По умолчанию

Так возникает ошибка: не удалось сравнить различные типы столбцов 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, 20:42   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В условие if не работает сравнение переменных с типов время avpdnepr C++ Builder 3 10.12.2015 14:19
Вложенность составных операторов александр_77777 Паскаль, Turbo Pascal, PascalABC.NET 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