SQLServer – Sélectionnez boolean si la colonne commence par une string

Je voudrais choisir un boolean de savoir si une colonne commence par une certaine string.

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

Existe-t-il un moyen de le faire sans utiliser un CASE ligne?

Non

Il n'y a pas implicite boolean CAST dans SQL Server ni un type boolean

 SELECT CAST(CASE WHEN name LIKE 'foo%' THEN 1 ELSE 0 END AS bit) AS isFoo FROM bar; 

Vous pourriez même ne pas avoir besoin de la dissortingbution en fonction de votre utilisation:

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

Cela returnnera 1 si le col commence par le text sinon 0. Aucun CASE impliqué.

Une opération UNION vous permet d'ignorer une instruction CASE en combinant deux sets de résultats. Dans la première requête, vous filterz toutes les lignes qui correspondent à 'foo%' et dans la seconde vous correspondez à toutes les lignes qui ne correspondent pas à 'foo%'

Quelque chose comme:

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

(Exemple codé en dur sans table cible.)

Créez une fonction définie par l'user que vous pouvez appeler pour vérifier si le nom contient foo.

Ne pas enlever à ce que gbn a suggéré mais je pense que ce serait plus efficace (mais essentiellement la même chose)

 SELECT CAST(CASE WHEN LEFT(name, 3)='foo' THEN 1 ELSE 0 END AS bit) AS isFoo FROM bar; 
 SELECT CASE WHEN name LIKE 'foo%' THEN 1 ELSE 0 END as isFoo FROM bar