2011-12-26 84 views
0
select count(category) from list where category like 'action' 

上面是我想运行的查询。但是,当我运行该查询时,出现数据类型错误 。
有没有其他方法count()?或...如何在数据类型为文本时使用count()方法
(sql)数据类型为文本时,如何使用count()方法?

+2

你正在收到什么确切的错误信息? – TetonSig 2011-12-26 09:38:28

+4

'category'是什么类型?我敢打赌,这不是一个字符串。 – Oded 2011-12-26 09:39:32

+0

如果category是一个varchar/nvarchar字段,这个查询应该可以工作吗?你确定它是正确的数据类型吗? – TheBoyan 2011-12-26 09:40:54

回答

2

你不能在文本,ntext,图像数据类型上应用COUNT()函数。

为什么你不能使用:

select count(*) from list where category like 'action' 

?你有一些空值?

如果你没有排除空值上面的查询已经可以很好地工作......

+0

我收到数据类型错误...你能指望一个文本字段?怎么样 ? – aleroot 2011-12-26 09:44:56

+1

@marc_s - 你说得对。今天大脑不能用这个问题... – Oded 2011-12-26 09:51:30

+0

谢谢。这很有效。 – 2011-12-26 10:06:02

-1

count()总是返回int喜欢的类型。

int读取结果数据存取:例如: getInt(1)

2

要回答在标题为未来的Google的问题,您可以使用

SELECT COUNT(CASE 
       WHEN some_text_column IS NOT NULL THEN 1 
      END) 
FROM some_table 

在你的情况,但(如通过@hvd在评论中指出)的WHERE category LIKE 'action'谓词确保任何NULL值将被排除在外无论如何,所以它是安全的替换它COUNT(*)

此外,你几乎肯定不应该使用text数据类型为此。这是一个不赞成使用的数据类型,用于保存超过8000字节的LOB(大对象)数据。

像“行动”的字符串绝对不符合这个描述!

+0

这是一个不好的例子:如果'category LIKE'action'',那么'category IS NOT NULL',所以它的意图行为不是'COUNT(*)'的行为,而是'COUNT )'(如果它是有效的)和'COUNT(*)'具有相同的效果。 – hvd 2011-12-26 12:30:02

+0

@ hvd - 好点!同意。 – 2011-12-26 12:30:53

相关问题