|   |   | 
| 
 | Про isnull (ЕСТЬNULL) | ☑ | ||
|---|---|---|---|---|
| 0
    
        andrewks 19.11.11✎ 20:32 | 
        Киньте, плиз, примером, как можно в первом параметре этой функции получить значение составного типа     | |||
| 1
    
        rs_trade 19.11.11✎ 20:34 | 
        (0) первый параметр туде передается, а не получается.     | |||
| 2
    
        Rie 19.11.11✎ 20:34 | 
        (0) Какого составного типа значение ты хочешь извлечь из таблицы?     | |||
| 3
    
        andrewks 19.11.11✎ 20:36 | 
        (1) вот я и спрашиваю, как туда можно передать значение составного типа, содержащее NULL     | |||
| 4
    
        andrewks 19.11.11✎ 20:37 | 
        в общем, я фантазирую на отвлечённые темы после разрыва шаблона от этих строк:
  Возвращаемое значение: значение первого параметра, в случае, если первый параметр не содержит значение NULL, значение второго параметра в противном случае. Второй параметр будет преобразован к типу первого в случае, если тип первого параметра является строкой или числом. | |||
| 5
    
        lubja 19.11.11✎ 20:39 | 
        может тогда через выбор организовать?     | |||
| 6
    
        Rie 19.11.11✎ 20:39 | 
        (4) Дык эта... А в чём проблема-то?     | |||
| 7
    
        lubja 19.11.11✎ 20:40 | 
        +5 типа
  выбор когда <условие> тогда иначе конец | |||
| 8
    
        GROOVY 19.11.11✎ 20:40 | 
        (4) Про составной тип ни слова.     | |||
| 9
    
        Rie 19.11.11✎ 20:41 | 
        (3) Что-то непонятно... NULL - это не составное значение. Это - признак отсутствия значения при соединении таблиц. Какое "составное значение" ты рассчитываешь получить при соединении таблиц?     | |||
| 10
    
        andrewks 19.11.11✎ 20:41 | 
        (6)(8) хорошо, объясните тогда, что означает "содержит", и про какое приведение типов для _второго_ говорится, если тип _первого_ параметра является строкой или числом?     | |||
| 11
    
        andrewks 19.11.11✎ 20:42 | 
        (9) понимаю. поэтому и разрыв шаблона     | |||
| 12
    
        Rie 19.11.11✎ 20:42 | 
        (10) Читай "содержит" как "является" - и будет счастье.     | |||
| 13
    
        andrewks 19.11.11✎ 20:42 | 
        (12) хорошо, допустим. а с приведением типов какая легенда?     | |||
| 14
    
        Rie 19.11.11✎ 20:44 | 
        (13) Например, тип первого параметра - строка, тип второго параметра - дата.     | |||
| 15
    
        andrewks 19.11.11✎ 20:45 | 
        (14) а дальше?     | |||
| 16
    
        andrewks 19.11.11✎ 20:45 | 
        +(15) строка != NULL, какое приведение типов тогда?     | |||
| 17
    
        Rie 19.11.11✎ 20:47 | 
        (16) Например,
  ВЫБРАТЬ ISNULL(Договоры.Наименование,'20110101') КАК ВотОно ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК Договоры ПО Договоры.Владелец = Контрагенты.Ссылка | |||
| 18
    
        rs_trade 19.11.11✎ 20:48 | 
        уже вторая ветка. я например тебя совсем не понимаю.     | |||
| 19
    
        andrewks 19.11.11✎ 20:51 | 
        (18) кстати, ты мне в предыдущей ветке так и не ответил.
  дело-то не во мне. это _я_ не понимаю некоторые перлы из ЖКК. особо "разрывошаблонистые" вот пощу, просто тупые пропускаю. добрая четверть скринов в ЖКК не соответствует тексту, я ж молчу. | |||
| 20
    
        andrewks 19.11.11✎ 20:59 | 
        (17) и в каком случае будет приведение типов?
  щас специально проверил, если NULL в 1-м параметре, возвращается значение такого же типа, что и 2-й параметр. т.е. запрос select isnull(Клиенты.Наименование,datetime(2011,01,05)) as НаимКл ,Склады.Наименование from Справочник.Клиенты as Клиенты full join Справочник.Склады as Склады on Клиенты.Ссылка=Склады.Ссылка возвращает именно значение типа дата в поле НаимКл, когда на входе NULL то же и с числами | |||
| 21
    
        rs_trade 19.11.11✎ 21:01 | 
        (19) я там так и не понял почему ты считаешь что агрегатная функция должна была вернуть несколько строк.  Хочешь изучить язык запросов, читай книги по ms sql, а не жкк. | |||
| 22
    
        andrewks 19.11.11✎ 21:03 | 
        (21) наоборот, я считаю, что должна была вернуть одну строку. а вернула две     | |||
| 23
    
        andrewks 19.11.11✎ 21:08 | 
        (21) у меня вопросы не по инструкциям скуля, а про вполне определённые их реализации в 1с 8. зачем мне книжки про ms sql? я их ещё в универе читал, что надо, осталось в памяти, что не надо - забыл, ну и ладно, всё равно же не надо     | |||
| 24
    
        Rie 19.11.11✎ 21:19 | 
        (23) В документации по SQL насчёт ISNULL сказано "Тип аргумента replacement_value должен явно преобразовываться к типу аргумента check_expresssion".
  Полагаю, на это и стоит ориентироваться. | |||
| 25
    
        rs_trade 19.11.11✎ 21:30 | 
        я честно говоря не помню никакого приведения типов. по моему просто возвращается второй параметр с его же типом     | |||
| 26
    
        Rie 19.11.11✎ 21:33 | 
        (25) Если нет явного преобразования - так и есть.
  IMHO, авторы документации по языку запросов 1С, переписывая описание ISNULL, просто упустили слова о необходимости преобразовывать явно. | |||
| 27
    
        andrewks 19.11.11✎ 21:35 | 
        (24) не всё так просто. читаю здесь:
  http://msdn.microsoft.com/en-us/library/ms184325.aspx Is the expression to be returned if check_expression is NULL. replacement_value must be of a type that is implicitly convertible to the type of check_expresssion. опять про неявное преобразование типов. и ни одного реального примера, когда же может выполняться это самое преобразование типов | |||
| 28
    
        andrewks 19.11.11✎ 21:37 | 
        если isnull засунуть в sum - ругань, тоже никаких  невяных преобразований типов     | |||
| 29
    
        Rie 19.11.11✎ 21:38 | 
        (27) Не знаю насчёт 2008-го SQL - нет его под рукой. 2005-й уверенно возвращает значение безо всяких преобразований типа.     | |||
| 30
    
        rs_trade 19.11.11✎ 21:51 | 
        как ведет себя 1с легко проверить посмотрев запрос в профайлере.     | |||
| 31
    
        andrewks 19.11.11✎ 22:07 | 
        всё, вкурил.
  вот здесь разъяснено: http://archive.msdn.microsoft.com/SQLExamples/Wiki/View.aspx?title=ISNULL_COALESCE пример: DECLARE @Field1 char(3), @Field2 char(50) SET @Field2 = 'Some Long String' SELECT ISNULL(@Field1, @Field2) --Returns 'Som' методисты 1С слизали описание с BOL, даже не потрудившись выяснить, а будет ли оно соответствовать реализации языка запросов 1С. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |