其中[CastleType]在SQL Server中设置为数据类型“text”,查询为:
SELECT *
FROM [Village]
WHERE [CastleType] = 'foo'
我收到错误:
数据类型 TEXT 和 VARCHAR 在等于运算符中不兼容。
我是否可以使用WHERE子句查询此数据类型?
答案 0 :(得分:91)
您可以使用LIKE
代替=
。没有任何通配符,这将产生同样的效果。
DECLARE @Village TABLE
(CastleType TEXT)
INSERT INTO @Village
VALUES
(
'foo'
)
SELECT *
FROM @Village
WHERE [CastleType] LIKE 'foo'
text
已弃用。更改为varchar(max)
将更容易使用。
数据可能有多大?如果您要进行相等比较,理想情况下您希望将此列编入索引。如果您将列声明为宽于900字节的列,则无法执行此操作,但您可以添加可用于加速此类查询的计算checksum
或hash
列。
答案 1 :(得分:17)
请试试这个
SELECT *
FROM [Village]
WHERE CONVERT(VARCHAR, CastleType) = 'foo'
答案 2 :(得分:12)
您无法将text
与=
运算符进行比较,而是必须使用列出here列出的其中一个比较函数。另请注意页面顶部的大型警告框,这很重要。
答案 3 :(得分:4)
如果您无法更改表本身的数据类型以使用varchar(max),请将查询更改为:
SELECT *
FROM [Village]
WHERE CONVERT(VARCHAR(MAX), [CastleType]) = 'foo'
答案 4 :(得分:2)
这不是错误消息所说的内容。它表示您无法使用=
运算符。试试LIKE 'foo'
。
答案 5 :(得分:0)
另一种选择是:
SELECT * FROM [Village] WHERE PATINDEX('foo', [CastleType]) <> 0
答案 6 :(得分:0)
这适用于MSSQL和MySQL:
SELECT *
FROM Village
WHERE CastleType LIKE '%foo%';