sql-server - tutorial - todo sobre elasticsearch
Cláusula WHERE en el tipo de datos "Texto" de SQL Server (7)
Eso no es lo que dice el mensaje de error. Dice que no puedes usar el operador =
. Pruebe por ejemplo LIKE ''foo''
.
Donde [CastleType] se establece como tipo de datos "texto" en SQL Server y la consulta es:
SELECT *
FROM [Village]
WHERE [CastleType] = ''foo''
Me sale el error:
Los tipos de datos TEXT y VARCHAR son incompatibles en el operador equal.
¿No puedo consultar este tipo de datos con una cláusula WHERE?
Estoy usando MySQL y esta consulta funciona para mí:
SELECT *
FROM @Village
WHERE CastleType LIKE ''%foo%'';
No puede comparar contra el text
con el operador =
, sino que debe usar una de las funciones de comparación que se enumeran here . También tenga en cuenta el gran cuadro de advertencia en la parte superior de la página, es importante.
Otra opción sería:
SELECT * FROM [Village] WHERE PATINDEX(''foo'', [CastleType]) <> 0
Por favor, intente esto
SELECT *
FROM [Village]
WHERE CONVERT(VARCHAR, CastleType) = ''foo''
Puede usar LIKE
lugar de =
. Sin ningún comodín, esto tendrá el mismo efecto.
DECLARE @Village TABLE
(CastleType TEXT)
INSERT INTO @Village
VALUES
(
''foo''
)
SELECT *
FROM @Village
WHERE [CastleType] LIKE ''foo''
text
está en desuso Cambiar a varchar(max)
será más fácil de usar.
¿Cuán grande es la probabilidad de que los datos sean? Si va a hacer comparaciones de igualdad, idealmente querrá indexar esta columna. Esto no es posible si declara la columna como algo más amplio que 900 bytes, aunque puede agregar una checksum
calculada o columna hash
que se puede usar para acelerar este tipo de consulta.
Si no puede cambiar el tipo de datos en la tabla para usar varchar (max), cambie su consulta a este:
SELECT *
FROM [Village]
WHERE CONVERT(VARCHAR(MAX), [CastleType]) = ''foo''