【发布时间】:2011-02-14 07:52:21
【问题描述】:
我基本上想这样做:
SELECT HasComments = CASE (LEN(Comments) > 1) WHEN 1 THEN 1 ELSE 0 END FROM TableName
换句话说,返回一个布尔值,告诉我 Comments 的长度是否大于 1。这给了我一个语法错误。
我怎样才能做到这一点?
【问题讨论】:
标签: sql sql-server tsql sql-server-2008 select
我基本上想这样做:
SELECT HasComments = CASE (LEN(Comments) > 1) WHEN 1 THEN 1 ELSE 0 END FROM TableName
换句话说,返回一个布尔值,告诉我 Comments 的长度是否大于 1。这给了我一个语法错误。
我怎样才能做到这一点?
【问题讨论】:
标签: sql sql-server tsql sql-server-2008 select
SELECT HasComments = CASE WHEN LEN(Comments) > 1 THEN 1 ELSE 0 END
FROM TableName
【讨论】:
SELECT CASE WHEN LEN(Comments) > 1 THEN 1 ELSE 0 END FROM TableName
更好的方法是让 Comments NULLable 并检查它。然后可以利用索引而不是 LEN() 会导致的表扫描。
【讨论】:
您缺少when 和end
SELECT HasComments = CASE WHEN (LEN(Comments) > 1) WHEN 1 THEN 1 ELSE 0 END
FROM TableName
【讨论】:
由于您没有 WHERE 子句,您很可能返回一列数据:
SELECT CASE WHEN LEN(Comments) > 1 THEN 1 ELSE 0 END as 'HasComments'
FROM TableName
【讨论】:
对于较新的 SQL 版本:
SELECT CASE WHEN LEN(Comments) > 1 THEN 1 ELSE 0 END FROM TableName
【讨论】: