|
Что вернет запрос? | ☑ | ||
---|---|---|---|---|
0
Азазелло
07.06.12
✎
10:03
|
Не проверяя в консоли запросов, что будет находится в Поле3? И вообще, отработает ли запрос?
ВЫБРАТЬ 1 КАК Поле ПОМЕСТИТЬ вт ; ВЫБРАТЬ вт1.Поле КАК Поле1, вт2.Поле КАК Поле2, ВЫРАЗИТЬ(ЕСТЬNULL(вт2.Поле, """") КАК СТРОКА) КАК Поле3 ИЗ вт КАК вт1 ЛЕВОЕ СОЕДИНЕНИЕ вт КАК вт2 ПО ИСТИНА |
|||
1
Maxus43
07.06.12
✎
10:05
|
а проверить лень?
|
|||
2
andrewks
07.06.12
✎
10:05
|
не отработает
|
|||
3
Maxus43
07.06.12
✎
10:05
|
ошибку вернёт
|
|||
4
Maxus43
07.06.12
✎
10:05
|
ВЫРАЗИТЬ(ЕСТЬNULL(вт2.Поле, """") КАК СТРОКА)
|
|||
5
andrewks
07.06.12
✎
10:05
|
из-за вот этого:
ВЫРАЗИТЬ(ЕСТЬNULL(вт2.Поле, """") КАК СТРОКА) |
|||
6
Maxus43
07.06.12
✎
10:05
|
бгг
|
|||
7
EasyRider
07.06.12
✎
10:06
|
такое условие соединения вообще можно не писать
|
|||
8
Азазелло
07.06.12
✎
10:08
|
Такое условие специально. И запрос, как понимаете, фейковый. Но он работает :)
|
|||
9
Азазелло
07.06.12
✎
10:08
|
(2), (3) а вот и нет!
|
|||
10
kosts
07.06.12
✎
10:08
|
"1" -?
|
|||
11
Азазелло
07.06.12
✎
10:09
|
(10) если бы... Тогда проблема преобразования ЧИСЛО к СТРОКА была бы наконец-то решена
|
|||
12
Maxus43
07.06.12
✎
10:09
|
Выразить(<Число> КАК СТРОКА) вернёт ошибку, не надо ляляля
|
|||
13
EasyRider
07.06.12
✎
10:10
|
(8)а что такого в этом условии?можно было так писать:
ИЗ вт КАК вт1, вт КАК вт2 |
|||
14
Азазелло
07.06.12
✎
10:10
|
(12) а теперь проверь ;)
|
|||
15
Азазелло
07.06.12
✎
10:10
|
(13) ЛЕВОЕ СОЕДИНЕНИЕ и конструкция ЕСТЬNULL
|
|||
16
Sammo
07.06.12
✎
10:11
|
Была помниться какая-то шняга, что выразить от числа не работало, а выразить от ЕстьNULL работало.
Но что возвращало - не помню. |
|||
17
Maxus43
07.06.12
✎
10:12
|
в любом случае - конкатенацию не сделать, а для этого в основном и надо преобразовывать тип. Представление(1) тоже строку вернёт, но уже на клиенте
|
|||
18
EasyRider
07.06.12
✎
10:13
|
(15)
ИЗ вт КАК вт1 ЛЕВОЕ СОЕДИНЕНИЕ вт КАК вт2 ПО ИСТИНА тоже самое что и ИЗ вт КАК вт1, вт КАК вт2 не так?) |
|||
19
Sammo
07.06.12
✎
10:13
|
А ты попробуй
ВЫРАЗИТЬ(ЕСТЬNULL(вт2.Поле, 0) КАК СТРОКА) КАК Поле3 Просто в результате 0 получается поле с составным типом, на один вид из которых можно применить Выразить как строка |
|||
20
Starhan
07.06.12
✎
10:14
|
Можно просто написать
ВЫБРАТЬ ВЫРАЗИТЬ(ЕСТЬNULL(1, """") КАК СТРОКА) КАК Поле3 Вся фишка в этом |
|||
21
andrewks
07.06.12
✎
10:15
|
никуя не понял. почему после естьнулл и выразить число в NULL переходит?
|
|||
22
Азазелло
07.06.12
✎
10:16
|
(18) нет, во втором случе - полное соединение
|
|||
23
Starhan
07.06.12
✎
10:16
|
Вся фишка в том что конструкция
ВЫРАЗИТЬ(ЕСТЬNULL(1, """") КАК СТРОКА) вовзращает NULL |
|||
24
andrewks
07.06.12
✎
10:17
|
(22) твои соединения тут вообще побоку, см. (20)
|
|||
25
hhhh
07.06.12
✎
10:17
|
(0) не работает. Выдает Поле3 = NULL. Что и следовало ожидать.
|
|||
26
andrewks
07.06.12
✎
10:17
|
(25) вопрос в том, почему ошибку не выдаёт
|
|||
27
Азазелло
07.06.12
✎
10:18
|
(21) вот и я сегодня с утра не понял, когда выгреб ошибку при попытке установить ТекстовоеСодержимое узла XML раныму NULLу.
(20) да, можно. Просто я специально привел ЛЕВОЕ СОЕДИНЕНИЕ, а условие ИСТИНА на самом деле может быть в реальной жизни и ЛОЖЬ. Резюме, надо аккуратнее с такими конструкциями |
|||
28
Maxus43
07.06.12
✎
10:19
|
баг видимо.
ТИПЗНАЧЕНИЯ(ПРЕДСТАВЛЕНИЕССЫЛКИ(Ссылка)) - валит платформу, а ТИПЗНАЧЕНИЯ(ПРЕДСТАВЛЕНИЕ(Ссылка)) -нет |
|||
29
Sammo
07.06.12
✎
10:20
|
(26) А нефиг писать запрос, результат которого колонки с составным типом
|
|||
30
andrewks
07.06.12
✎
10:20
|
тоже считаю, что баг
|
|||
31
Maxus43
07.06.12
✎
10:21
|
в профайлере кто-нить поглядите на запрос
|
|||
32
EasyRider
07.06.12
✎
10:21
|
(22)Левое соединение при условии Истина это тоже самое,что и полное соединение при условии Истина
|
|||
33
Азазелло
07.06.12
✎
10:22
|
(32) чой-то?
|
|||
34
Азазелло
07.06.12
✎
10:22
|
(33) ээээ... Да, я лошара :)
|
|||
35
Maxus43
07.06.12
✎
10:23
|
(33) в данном случае да, т.к. поля у таблиц 1 в 1
|
|||
36
EasyRider
07.06.12
✎
10:23
|
)
|
|||
37
andrewks
07.06.12
✎
10:23
|
+(32) и правое :)
|
|||
38
Starhan
07.06.12
✎
10:25
|
(29)То есть если я выберу запросом поле с составным типом строка b число. В котором значение число
И выражу его как строка результат будет NULL? |
|||
39
Starhan
07.06.12
✎
10:26
|
строка и число*
|
|||
40
hhhh
07.06.12
✎
10:26
|
(26) видимо поэтому
Если <Выражение> содержит в составном типе требуемый <Тип значения>, то приведение типа считается осуществимым, и для каждого значения указанного типа результатом будет это самое значение. Для значений других типов результатом приведения типа будет значение NULL. То есть выражения типа "ВЫБРАТЬ 1" содержит в себе все типы. |
|||
41
Maxus43
07.06.12
✎
10:27
|
прикольно, короче видимо дошло до меня.
ЕСТЬNULL(1, """") - это уже определяет что тип у поля составной, строка-число. Выразить - приводит к одному типу из составного, т.е. к строке. т.к. строки там нет - вот и Нулл |
|||
42
Maxus43
07.06.12
✎
10:27
|
Преобразование типов всё равно нереально в запросе
|
|||
43
Starhan
07.06.12
✎
10:27
|
(40) скорее выраженик ЕстьNULL(1,"""") делает поле с составным типом.
|
|||
44
andrewks
07.06.12
✎
10:28
|
(40) выбрать тут ни при чём. собака именно в естьнулл
|
|||
45
hhhh
07.06.12
✎
10:28
|
стоп, а что выдаст запрос?
ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "1" |
|||
46
andrewks
07.06.12
✎
10:29
|
(45) таблицу из двух строк
|
|||
47
Maxus43
07.06.12
✎
10:29
|
(45) тоже составной тип
|
|||
48
andrewks
07.06.12
✎
10:29
|
+(44) ибо
ВЫРАЗИТЬ(ЕСТЬNULL(1, """") КАК СТРОКА) уже возвращает NULL |
|||
49
Starhan
07.06.12
✎
10:31
|
(45)
ВЫБРАТЬ ВЫРАЗИТЬ(ЕСТЬNULL(ВложенныйЗапрос.Поле1, "") КАК СТРОКА) КАК Поле11 ИЗ (ВЫБРАТЬ 1 КАК Поле1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "1") КАК ВложенныйЗапрос да будет составной тип 1я строка NULL вторая "1" |
|||
50
andrewks
07.06.12
✎
10:32
|
составной тип тут при чём?
|
|||
51
EasyRider
07.06.12
✎
10:32
|
выбрать ВЫРАЗИТЬ(ЕСТЬNULL(1, "") КАК СТРОКА)
в профайлере кажет уже SELECT CAST(NULL AS NVARCHAR) |
|||
52
Starhan
07.06.12
✎
10:33
|
(50)а ну да :) ща переделаю
|
|||
53
Starhan
07.06.12
✎
10:34
|
+(52) вот тот же рузльтат.
ВЫБРАТЬ ВЫРАЗИТЬ(ВложенныйЗапрос.Поле1 КАК СТРОКА) КАК Поле11 ИЗ (ВЫБРАТЬ 1 КАК Поле1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "1") КАК ВложенныйЗапрос |
|||
54
andrewks
07.06.12
✎
10:34
|
(51)но приходит-то чистый NULL, не строка
|
|||
55
EasyRider
07.06.12
✎
10:35
|
(54)причем не через sp_executesql делается,а обычным запросом
|
|||
56
andrewks
07.06.12
✎
10:35
|
точнее, глюк в совместном использовании Выразить и ЕстьНулл
|
|||
57
Starhan
07.06.12
✎
10:36
|
Нет глюк именно в Выразить и составным полем (описано в (40))
А ЕстьNULL уже делает составное поле. Точнее даже не глюк, а нормлаьная работа :) |
|||
58
andrewks
07.06.12
✎
10:38
|
да, согласен.
Если <Выражение> содержит в составном типе требуемый <Тип значения>, то приведение типа считается осуществимым, и для каждого значения указанного типа результатом будет это самое значение. Для значений других типов результатом приведения типа будет значение NULL. |
|||
59
Sammo
07.06.12
✎
10:39
|
Логика здесь следующая, имхо.
Есть таблица, в которой есть поле составного типа. Один из типов - строка Значит можно применить Выразить как строка и по ошибке не выпадет Но если попадется значение, которое нельзя приобразовать в строку, то результат будет Null В "общем водка подорожает" |
|||
60
andrewks
07.06.12
✎
10:40
|
именно так: естьнулл делает составной тип, а выразить возвращает нулл, ибо значения нужного типа не найдено
|
|||
61
Maxus43
07.06.12
✎
10:41
|
практической пользы нет один фиг. постулат о невозможности Преобразовании типа в запросе - остался, возможно только Приведение составных
|
|||
62
andrewks
07.06.12
✎
10:44
|
(59) "Но если попадется значение, которое нельзя приобразовать в строку, то результат будет Null "
не совсем так. нулл возвращается потому, что в составном типе нет значения требуемого типа. т.е., в принципе, преобразовать-то его можно (например, скуль умеет), но 1С заложило такой постулат, что нельзя |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |