uso not incluye fechas extremos sql database postgresql search

not - SQL Between cláusula con columnas de cadenas



sql between fechas (6)

La expresion

name between ''A'' and ''B''

es equivalente a

name>=''A'' and name<=''B''

Entonces ''Argentina'' es> = ''A'' y <= ''B'' y satisface la condición. Pero ''Bolivia'' NO es <= ''B''. ''Bolivia''> ''B''. No solo mira la primera letra: mira toda la cadena. Que seguramente es la forma en que debería ser: si no hiciera esto, no habría forma de decir que quería un rango que incluyera ''Smith'' pero no ''Smithers''.

Para lograr lo que quieres, puedes decir:

substr(name,1,1) between ''A'' and ''B''

o:

name like ''A%'' or name like ''B%''

o:

name>=''A'' and name<''C''

Quiero hacer una búsqueda usando la cláusula "entre" sobre una columna de cadena. Haciendo una prueba, obtuve esto:

Supongamos que hay una tabla de país con una columna de "nombre" de tipo varchar. Si ejecuto esta consulta:

Select * from country where name between ''a'' and ''b''

Obtuve este resultado:

Argentina . . . Argelia.

Excluye a los países que comienzan con B, lo cual me pareció un poco extraño.

¿Hay alguna manera de hacer esta búsqueda de una manera más precisa? ¿Alguna otra idea para hacer esta búsqueda?

Gracias por adelantado


Select * from country where substring(name FROM 1 FOR 1) between ''A'' and ''B'';


Creo que sé cómo resolver tu problema. Puedes intentar agregar un personaje extra en la espalda como este

select * from tablea where column1 between ''ABC'' and ''ACD''+''Z''

esto devolverá un resultado de ABC% a ACE


La razón por la que esta declaración no funcionó es SQL almohadilla la cadena con espacios en blanco hasta que tenga la misma longitud que la cadena de comparación. Entonces, en comparación, sql comparó b seguido de varios espacios en blanco con b****** . Debido a que el espacio en blanco aparece antes que todas las otras letras, sql decidió que b***** vino después de b[6 spaces] . Por lo tanto, no debería mostrarse.


Otra consulta que obtendría los países que comienzan con b y A, sería:

Select * from country where name between ''a'' and ''c''


El resultado es exacto, pero puede ser un malentendido. x between a and b significa x>=a and x<=b . (Consulte la documentación de PostGRES para más detalles).

Si quieres obtener líneas que comiencen con una a o una b , di lo que quieres decir:

select * from country where name like ''a%'' or name like ''b%''

like usa los índices de la tabla para que pueda obtener el máximo rendimiento al usar esto.