Составные поля и типы в запросах

Для проверки типов составных полей язык запросов DaJet реализует оператор сравнения типов данных IS. Этот же оператор используется для сравнения на равенство значению NULL.

Кроме этого реализована функция ISNULL(значение1, значение2), где

Если значение1 является NULL, то функция возвращает значение2, иначе - значение1.

Для определения кода ссылочного типа и его уникального идентификатора реализованы функции TYPEOF и UUIDOF соответственно.

Пример проверки результата левого соединения на значение NULL:

   SELECT
 DISTINCT Валюта.Код, Валюта.Наименование
     FROM Справочник.Валюты          AS Валюта
LEFT JOIN РегистрСведений.КурсыВалют AS КурсыВалют
       ON Валюта.Ссылка = КурсыВалют.Валюта
    WHERE КурсыВалют.Валюта IS NOT NULL

Пример использования функции ISNULL:

   SELECT Валюта.Код                                       AS Код,
          Валюта.Наименование                              AS Имя,
          ISNULL(КурсыВалют.Курс,                  0.0000) AS Курс,
          ISNULL(КурсыВалют.Период, '0001-01-01T00:00:00') AS Дата
     FROM Справочник.Валюты          AS Валюта
LEFT JOIN РегистрСведений.КурсыВалют AS КурсыВалют
       ON Валюта.Ссылка = КурсыВалют.Валюта
 ORDER BY Валюта.Код ASC, КурсыВалют.Период ASC

Пример сравнения типов ссылочных данных составного поля (оператор IS):

SELECT Движения.Период,
  CASE
    WHEN Движения.Регистратор IS Документ.ПоступлениеТоваровУслуг
      THEN Поступление.Номер
    WHEN Движения.Регистратор IS Документ.РеализацияТоваровУслуг
      THEN Реализация.Номер
    ELSE ''
  END AS НомерДокумента

     FROM РегистрНакопления.ТоварыНаСкладах AS Движения

LEFT JOIN Документ.ПоступлениеТоваровУслуг AS Поступление
       ON Движения.Регистратор = Поступление.Ссылка

LEFT JOIN Документ.РеализацияТоваровУслуг AS Реализация
       ON Движения.Регистратор = Реализация.Ссылка

WHERE Движения.Регистратор IS Документ.ПоступлениеТоваровУслуг
   OR Движения.Регистратор IS Документ.РеализацияТоваровУслуг

Пример использования функций TYPEOF и UUIDOF:

  SELECT Регистратор,
  TYPEOF(Регистратор) AS type,
  UUIDOF(Регистратор) AS uuid
    FROM РегистрНакопления.ОстаткиТовара
ORDER BY TYPEOF(Регистратор) ASC

Регистраторtypeuuid
{852:8d40e09c-935c-8ecc-11ed-71076402f3b2}8528d40e09c-935c-8ecc-11ed-71076402f3b2
{852:8d40e09c-935c-8ecc-11ed-71076402f3b2}8528d40e09c-935c-8ecc-11ed-71076402f3b2
{852:8d40e09c-935c-8ecc-11ed-71076402f3b2}8528d40e09c-935c-8ecc-11ed-71076402f3b2
{853:8d40e29c-935c-8ecc-11ed-9d1c03cae1ec}8538d40e29c-935c-8ecc-11ed-9d1c03cae1ec