SQL Server“文本”数据types的WHERE子句
在SQL Server中将[CastleType]设置为数据types“text”,查询为:
SELECT * FROM [Village] WHERE [CastleType] = 'foo'
我得到的错误:
数据typesTEXT和VARCHAR在等于运算符中是不兼容的。
我不能用WHERE子句查询这个数据types吗?
你可以使用LIKE
而不是=
。 没有任何通配符,这将有相同的效果。
DECLARE @Village TABLE (CastleType TEXT) INSERT INTO @Village VALUES ( 'foo' ) SELECT * FROM @Village WHERE [CastleType] LIKE 'foo'
text
已弃用。 更改为varchar(max)
将更容易处理。
数据可能有多大? 如果你打算进行相等的比较,那么你最好想索引这个列。 这是不可能的,如果你声明列的宽度超过900个字节,虽然你可以添加一个计算checksum
或hash
列,可用于加快这种types的查询。
请试试这个
SELECT * FROM [Village] WHERE CONVERT(VARCHAR, CastleType) = 'foo'
您不能与使用=
运算符的text
进行比较,而是必须使用此处列出的其中一个比较函数。 还要注意页面顶部的大警告框,这很重要。
这不是错误信息所说的。 它说你不能使用=
操作符。 试试例如LIKE 'foo'
。
如果无法将表本身上的数据types更改为使用varchar(max),那么将您的查询更改为:
SELECT * FROM [Village] WHERE CONVERT(VARCHAR(MAX), [CastleType]) = 'foo'
另一种select是:
SELECT * FROM [Village] WHERE PATINDEX('foo', [CastleType]) <> 0
我正在使用MySQL,这个查询适用于我:
SELECT * FROM @Village WHERE CastleType LIKE '%foo%';