我想选择一个列是否以某个字符串开头。
SELECT (name LIKE 'foo%') AS isFoo FROM bar;
有没有办法在不使用内联CASE
的情况下执行此操作?
答案 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