|
Про 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С. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |