2013-09-14 4 views
2

Когда я бегуОшибка при использовании SUM на текстовое значение

SELECT SUM(CASE column1 WHEN 'sometext' THEN 1 ELSE 0 END) 
FROM table1 

Я получаю следующее сообщение об ошибке:

The data types text and varchar are incompatible in the equal to operator.

Колонку тип данных text поэтому я попытался следующие, но получил ту же ошибку. Есть идеи?

SELECT SUM(CASE column1 WHEN CAST('sometext' AS VARCHAR (40)) THEN 1 ELSE 0 END) 
FROM table1 
+3

Вы можете изменить определение столбца с 'text' на' varchar (max) '. Текст не поддерживает '=' – Laurence

ответ

0

это работает:

select sum(case when cast(column1 as varchar(max)) = 'sometext' then 1 else 0 end) 
from table1 

sql fiddle demo

+0

, он может не делать то, что вы ожидаете http://sqlfiddle.com/#!3/0e408/1 – Laurence

+0

@Laurence да не знаю, почему я использовал 40. Это должно быть 'max '(или если это невозможно, максимальная длина данных в столбце1) –

0

Вы должны сравнить столбец со значением, и если столбец является иным, чем VARCHAR или NTEXT, то вам необходимо преобразовать тип данных, в противном случае тип приведения не требуется, вы можете просто использовать,

select sum(case when column1 = 'sometext' then 1 else 0 end) 
from table1 

Если column1 отличается от строки, то вы можете использовать

select sum(case when cast(column1 as varchar(max)) = 'sometext' then 1 else 0 end) 
from table1 

если column1 является NTEXT, то вы можете использовать

select sum(case when cast(column1 as nvarchar(max)) = N'sometext' then 1 else 0 end) 
from table1 

Вы также можете проверить этот ответ здесь: http://techsharehub.blogspot.com/2013/09/compare-string-int-and-ntext-with.html

Смежные вопросы