Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Возврат boolean-значения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Здравствуйте!

В поле пишу выражение, который возвращает "Да" или "Нет".
SELECT
    ...
    CASE WHEN NOT(Т2.Поле1 IS NULL) THEN 'Да' Else 'Нет' END
FROM
    Таблица1 Т1
LEFT JOIN
    Таблица2 Т2
...
Запрос работает.

А надо возвращать True или False. Если вместо "Да" написать True и вместо "Нет" написать False, то пишет недопустимое имя столбца.

Как правильно написать?
12 янв 18, 14:39    [21101684]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ferzmikk,

sql пишет? у вас там вообще нет "имя столбца."
12 янв 18, 14:41    [21101697]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
ferzmikk
Если вместо "Да" написать True и вместо "Нет" написать False, то пишет недопустимое имя столбца.
Замените 'За' на 'True', а 'Нет' на 'False'.
Типа BOOLEAN в MSSQL до сих пор нет.
12 янв 18, 14:46    [21101737]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
TaPaK
ferzmikk,
sql пишет? у вас там вообще нет "имя столбца."

ferzmikk,
пятница да?
CASE WHEN NOT(Т2.Поле1 IS NULL) THEN 'Да' Else 'Нет' END
CASE WHEN NOT(Т2.Поле1 IS NULL) THEN True Else False END -- конечно, ошибка, столбцов True/False не существует.
CASE WHEN NOT(Т2.Поле1 IS NULL) THEN 'True' Else 'False' END
CONVERT( [TINYINT|BIT], CASE WHEN NOT(Т2.Поле1 IS NULL) THEN 1 Else 0 END ) -- нужное оставить
12 янв 18, 14:47    [21101738]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
Добрый Э - Эх
Guest
iap,

справедливости ради нужно сказать, что его не только в MS SQL Server нет.... Изначально проблема в том, что его нет в ANSI-стандарте языка SQL. Следовательно, разработчики СУБД и не спешат включать его в состав своих диалектов SQL
12 янв 18, 14:51    [21101767]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Руслан Дамирович
CONVERT( [TINYINT|BIT], CASE WHEN NOT(Т2.Поле1 IS NULL) THEN 1 Else 0 END ) -- нужное оставить
CONVERT( TINYINT, CASE WHEN NOT(Т2.Поле1 IS NULL) THEN 1 Else 0 END )
CONVERT( BIT, CASE WHEN NOT(Т2.Поле1 IS NULL) THEN 1 Else 0 END )
CAST(CASE WHEN NOT(Т2.Поле1 IS NULL) THEN 1 Else 0 END AS BIT)
CAST(CASE WHEN NOT(Т2.Поле1 IS NULL) THEN 1 Else 0 END AS TINYINT)

Каждая запись возвращает не True/False, а 0/1.
12 янв 18, 15:43    [21101968]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ferzmikk,

автор
Каждая запись возвращает не True/False, а 0/1.
это всё равно будут просто буквы, интерпретируйте 1/0
12 янв 18, 15:44    [21101973]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7757
Баловство... Это клиент должен делать.

CASE WHEN NOT(Т2.Поле1 IS NULL) THEN 'Да' Else 'Нет' END


А где алиас столбца? Код должен предсказуемо работать.
12 янв 18, 17:14    [21102441]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Я правильно понимаю, что в основных запросах, должно выводиться 1/0, а на последующих запросах выводить "True"/"False" как текст?
12 янв 18, 20:03    [21102992]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
Добрый Э - Эх
Guest
ferzmikk,

сразу можешь выводить словами 'false'/'true'. или даже 'ложь','клади' 'правда'. никто ж не запрещает... главное ты должен понимать - что возвращать ты будешь либо числовое поле (0/1), либо текстовое ('false'/'true'), но никак не поле с логическим типом boolean.
12 янв 18, 20:10    [21103024]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Понял. Спасибо!
12 янв 18, 20:17    [21103043]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
aleks222
Guest
Добрый Э - Эх
ferzmikk,

сразу можешь выводить словами 'false'/'true'. или даже 'ложь','клади' 'правда'. никто ж не запрещает... главное ты должен понимать - что возвращать ты будешь либо числовое поле (0/1), либо текстовое ('false'/'true'), но никак не поле с логическим типом boolean.


Ты, наверное не в курсе, все "логические типы" - суть 0/1.
Поэтому bit можно смело конвертить в bool на клиенте.
13 янв 18, 10:35    [21103900]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
Добрый Э - Эх
Guest
aleks222

Ты, наверное не в курсе, но вся компьютерная математика - суть 0/1.
Пара-тройка не взлетевших проекта с трехзначной логикой - не всчёт
13 янв 18, 14:20    [21104177]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Добрый Э - Эх
aleks222

Ты, наверное не в курсе, но вся компьютерная математика - суть 0/1.
Пара-тройка не взлетевших проекта с трехзначной логикой - не всчёт
SQL разве не взлетел?
13 янв 18, 14:39    [21104218]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
Добрый Э - Эх
Guest
iap,

не стоит путать значение и его отсутствие... Если что, я имел ввиду такое
13 янв 18, 15:46    [21104361]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Добрый Э - Эх
iap,

не стоит путать значение и его отсутствие... Если что, я имел ввиду такое

как раз sql и реализует трёхзначную логику, что бы вы не имели ввиду
15 янв 18, 10:36    [21106645]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
TaPaK
Добрый Э - Эх
iap,
не стоит путать значение и его отсутствие...

как раз sql и реализует трёхзначную логику, что бы вы не имели ввиду

Троичная логика != троичное представление данных, реализованное на двоичной логике.
15 янв 18, 11:54    [21106987]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
msLex
Member

Откуда:
Сообщений: 8091
Руслан Дамирович,
Добрый Э - Эх
трехзначной логикой
15 янв 18, 11:56    [21106996]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Руслан Дамирович
TaPaK
пропущено...

как раз sql и реализует трёхзначную логику, что бы вы не имели ввиду

Троичная логика != троичное представление данных, реализованное на двоичной логике.



автор
Ты, наверное не в курсе, но вся компьютерная математика - суть 0/1.
Пара-тройка не взлетевших проекта с трехзначной логикой - не всчёт

логика, математика и неожиданно хранинение... ну да...
15 янв 18, 11:58    [21107009]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
TaPaK
логика, математика и неожиданно хранинение... ну да...

Неожиданно что?
Что в SQL не реализована троичная логика, а есть лишь неопределенное значение, которое к троичной логике имеет такое же отношение, как астрология к астрономии?
15 янв 18, 12:23    [21107132]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Руслан Дамирович
TaPaK
логика, математика и неожиданно хранинение... ну да...

Неожиданно что?
Что в SQL не реализована троичная логика, а есть лишь неопределенное значение, которое к троичной логике имеет такое же отношение, как астрология к астрономии?
А попроще? Что не устраивает в троичной логике SQL, никак не пойму.
15 янв 18, 12:25    [21107139]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Руслан Дамирович
TaPaK
логика, математика и неожиданно хранинение... ну да...

Неожиданно что?
Что в SQL не реализована троичная логика, а есть лишь неопределенное значение, которое к троичной логике имеет такое же отношение, как астрология к астрономии?

ну что тут скажешь, нет так нет
автор
systems in which there are three truth values indicating true, false and some indeterminate third value


https://en.wikipedia.org/wiki/Three-valued_logic
https://en.wikibooks.org/wiki/Structured_Query_Language/NULLs_and_the_Three_Valued_Logic
https://sqlserverfast.com/blog/hugo/2007/07/the-logic-of-three-valued-logic/
15 янв 18, 12:27    [21107147]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Я тебе тоже могу потыкать ссылками.
Покажи мне лучше код SQL, где True AND NULL = True, а NULL AND True = NULL.
Тогда я вместе с тобой порадуюсь за реализацию троичной логики в SQL.
15 янв 18, 12:35    [21107180]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
msLex
Member

Откуда:
Сообщений: 8091
Руслан Дамирович
True AND NULL = True, а NULL AND True = NULL.


а с чего это A LogicAnd B должно быть неравно B LogicAnd A
15 янв 18, 13:17    [21107427]     Ответить | Цитировать Сообщить модератору
 Re: Возврат boolean-значения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
msLex,

возмущенец хочет сказать(в какой-то странной форме) что в предикате sql всё сведётся к true/false, что идёт в разрез с его пониманием троичной логики в чистом виде, но не отменяет присутсвия её в sql
15 янв 18, 13:23    [21107454]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить