Duvida como montar query onde use intervalo entre nomes?

Olá,

uma duvida vou receber dois parametros :

  • nome_incial valor A

  • nome_final valor C

onde terei que fazer a pesquisa na tabela cliente :

  • codigo number(2)
  • nome varchar2(50)

e terei que trazer os nomes iniciais de A a C

qual comando poderei usar já que esse comando sql terá
que funcionar no mysql,oracle,sqlserver…

alguém já passou por isso …

abs

Procure por BETWEEN … AND na sua documentação.

mas terei que usar substr pra pegar a primeira letra

pois terei nomes :

Arnaldo
Armando
Belicia
Cida
Dores

se usar between não teria uqe fazer isso ???

Por exemplo, digamos que você queira pegar todos os nomes que começam por A, B e C. A consulta seria:

BETWEEN “A” AND “D”

você deve concordar comigo que vai pegar todos os nomes que começam por A, B, C e apenas um nome “D”, que não existe, porque na sua base não devem existir nomes com apenas uma letra.

o que usei e no banco tem o nome :

abel
novo
zeus

e passei o parametro titulari --> a
titularf --> p

e trouxe os três nomes ???

não entendi ???


where (icd.cn=0) or  (icd.cn between  "%$P{titulari}" and   "%$P{titularf}")

Pode ser que cn = 0. Faça uma query “no braço” para entender o que está ocorrendo.

Além disso, eu não pus nenhum “%” no BETWEEN / AND.
De onde você tirou o “%”?
"%" se usa com LIKE, e isso não é um LIKE.

fiz isso e deu certo …


where ($P{titulari} ="0" and $P{titularf} ="0") or  (substr(upper(icd.cn), 1, 1) between  upper($P{titulari}) and   upper($P{titularf}))

Só ia dizer para você que, do jeito que você fez, muito provavelmente você vai ter um “table scan”.
Normalmente nunca é recomendável usar um “substr” ou coisa parecida de um campo, porque o otimizador de consultas SQL do banco não consegue trabalhar direito com funções operando sobre colunas.