SQLServer - 如果列以字符串开头,请选择bool

时间:2011-03-10 19:32:27

标签: sql sql-server sql-server-2005 tsql

我想选择一个列是否以某个字符串开头。

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

有没有办法在不使用内联CASE的情况下执行此操作?

6 个答案:

答案 0 :(得分:20)

没有

SQL Server中既没有隐式布尔CAST,也没有布尔类型

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

答案 1 :(得分:4)

根据您的使用情况,您可能根本不需要演员:

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

如果col以文本开头,则返回1,否则返回0.否CASE参与。

答案 2 :(得分:3)

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

(没有目标表的硬编码示例。)

答案 3 :(得分:2)

创建一个可以调用的用户定义函数,以检查名称是否包含foo。

答案 4 :(得分:1)

不要忽视gbn的建议,但我认为这会更有效率(但基本上是相同的)

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

答案 5 :(得分:0)

SELECT 
  CASE WHEN name LIKE 'foo%'          
     THEN 1
    ELSE  0
  END as isFoo

  FROM bar