equivalente funcional para PostgreSQL "em" SQL Server

votos
3

Em postgres você pode fazer uma comparação com vários itens, como assim:

 SELECT 'test' IN ('not','in','here');

Que é o mesmo que fazer:

  SELECT ('test' = 'not' OR 'test' = 'in' OR 'test' = 'here');

Existe um equivalente funcional para o SQL Server?

Publicado 04/12/2008 em 17:33
fonte usuário
Em outras línguas...                            


3 respostas

votos
0

isto deve dar resultados semelhantes em todas as versões recentes de MSSQL. Você também pode escrever uma função escalar para encurtar um pouco as coisas.

select case 
        when 'test' IN ('not', 'in', 'here') then 1
            else 0
            end;
Respondeu 04/12/2008 em 17:48
fonte usuário

votos
5

Ele é suportado, mas você terá que colocar a expressão em algum lugar que aceita uma expressão booleana. Por exemplo, em uma casedeclaração:

select  case  when 'test' in ('not','in','here')  then 1  else 0  end

----------- 
0

(1 row(s) affected)

Ou uma wherecláusula:

select * from T where C in (1,3,5,7,9)
Respondeu 04/12/2008 em 17:48
fonte usuário

votos
0

Isto vai dar 1 se 'teste' é na comparação definido 1 ou mais vezes, ou 0 se não for.

SELECT CAST(COUNT(*) AS BIT) as IsItHere WHERE 'test' IN('not','in','here')

Note-se que o elenco não é estritamente necessário, mas pode ser útil se isso é chamado de outra língua ... Em seguida, deverá resolver para um boolean.

EDIT: De acordo com MSSQL consulta planejador, este é executado ~ 4 vezes mais rápido do que o método do caso. YMMV.

Respondeu 04/12/2008 em 17:48
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more