Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > 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
Сообщений: 17,900
Репутация: 6285
По умолчанию

а так:
Код:

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
Сообщений: 17,900
Репутация: 6285
По умолчанию

Надо полагать, что требуется точное соответствие типов у полей. Это и предположил из сообщения об ошибке. И следующая ошибка тоже на это указывает. А вообще без понятия, с 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


05:20.


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

RusProfile.ru


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