Estou tentando recuperar dados de uma tabela onde existem códigos de projetos que são identificados pelos três primeiros números, os demais são únicos. Assim, por exemplo, a consulta é:
SELECT * FROM
TableA
WHERE LEFT(acccode,3) IN ('121','131','141','151','161')
Agora, quero que essa condição seja verdadeira para todos esses códigos, exceto para um. Digamos, para o primeiro, eu quero que pareça mais quatro caracteres para algo como '121-111%'. Como posso alterar meu IN
operador lá ou tenho que ir com um LIKE
operador com algo como:
SELECT * FROM
TableA
WHERE acccode LIKE '121-111%'
OR acccode LIKE '131%'...
e assim por diante...?
Para esclarecer: os códigos que começam com 121-111, 131, 141, 151, 161 são os que desejo selecionar.
Todas as colunas são nvarchar
.
"Melhor" em que sentido?
A
LIKE
versão é sargável, pois você não tem curingas iniciais e pode usar buscas de índice para que seja melhor a esse respeito.Neste caso, você também pode considerar
Como simplificação, embora a versão totalmente expandida possa ser mais eficiente.
Se você não tiver nenhum índice útil, talvez prefira usar apenas
De qualquer forma, parece que há algum significado oculto
acccode
que pode ser melhor armazenar em uma coluna separada.