SQLServer - выберите bool, если столбец начинается со строки - PullRequest
5 голосов
/ 10 марта 2011

Я хотел бы выбрать логическое значение того, начинается ли столбец с определенной строки.

SELECT (name LIKE 'foo%') AS isFoo FROM bar;

Есть ли способ сделать это без использования встроенного CASE?

Ответы [ 6 ]

21 голосов
/ 10 марта 2011

Нет

В SQL Server нет неявного логического CAST и логического типа

SELECT CAST(CASE WHEN name LIKE 'foo%' THEN 1 ELSE 0 END AS bit) AS isFoo
FROM bar;
4 голосов
/ 10 марта 2011

Вам может даже не понадобиться приведение в зависимости от вашего использования:

SELECT CAST(PATINDEX('foo%'), name) AS bit) FROM bar

Возвращает 1, если col начинается с текста, иначе 0. Нет CASE.

3 голосов
/ 10 марта 2011
Операция

A UNION позволит вам пропустить оператор CASE, объединив два набора результатов.В первом запросе вы фильтруете все строки, которые соответствуют 'foo%', а во втором - все строки, которые не соответствуют 'foo%'

Что-то вроде:

SELECT 1 AS [YourBoolean], 'fool' WHERE 'fool' LIKE 'foo%'
UNION
SELECT 0, 'fuel' WHERE 'fuel' NOT LIKE 'foo%' 
ORDER BY 1

(Hard-закодированный пример без целевой таблицы.)

2 голосов
/ 10 марта 2011

Создайте пользовательскую функцию, которую вы можете вызвать inorder, чтобы проверить, содержит ли имя foo.

1 голос
/ 10 марта 2011

Не отнимать от того, что предложил gbn, но я думаю, что это было бы более эффективным (но по сути то же самое)

SELECT CAST(CASE WHEN LEFT(name, 3)='foo' THEN 1 ELSE 0 END AS bit) AS isFoo
FROM bar;
0 голосов
/ 10 марта 2011
SELECT 
  CASE WHEN name LIKE 'foo%'          
     THEN 1
    ELSE  0
  END as isFoo

  FROM bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...