Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

AlexITWV

& E STR na linguagem SQL

Recommended Posts

ALGUÉM PODERIA EXPLICAR A FUNÇÃO DO "&" E O "STR", NESTE CÓDIGO?

 

LTRIM(STR(ROUND(((CAST(DATAEMI AS INT)&65024)/512)

+1980,0)))

+right('00'

+LTRIM(STR(ROUND((CAST(DATAEMI AS INT)&480)/32,0))),2)

+right('00'

+LTRIM(STR(ROUND((CAST(DATAEMI AS INT)&31),0))),2)

 

PRECISO TRANSFERIR ELE PARA ORACLE, SE ALGUÉM TIVER DICAS, GRATO!

 

OBRIGADO!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não conheço sqlserver mas o & parece ser um operador modular (resto) o str converte um número para string.

 

O que faria esta operacão ? Não me ocrreu o que pode ser.

 

Equivalentes no Oracle

 

 

& 》》MOD

STR 》》 TO_CHAR

Compartilhar este post


Link para o post
Compartilhar em outros sites

20120914
20120914
20120901
20120901
20120901
20120901

 

retorna datas,

 

este & pelo o que eu entendi transforma em bit.

Eh uma concatenação de bits

Operador AND e Transforma em bit e 0 com 0 = 0, 1 com 1 = 1, 1 com 0=0

então

 

65024=1111 1110 0000 0000

 

mas não sei como utilizar isto no oracle.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser pois os divisores são potencias de 2.

 

Qual o type deste DATAEMI . O que tem gravado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual a lógica de gravação ?

 

Confesso não ter entendido nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

como se estiver criptografado, eles fazem a concatenação da string somando os bits. o valor de dataemi sempre que passar por esta formula dos bits vai dar a data correta da movimentação

 

select

AUTOSEQUENCIAL, CAIXAIN, CPFCNPJ, remessa,numero

,case

when isdate(LTRIM(STR(ROUND(((CAST(DATAEMI AS INT)&65024)/512)+1980,0)))+right('00'+LTRIM(STR(ROUND((CAST(DATAEMI AS INT)&480)/32,0))),2)+right('00'+LTRIM(STR(ROUND((CAST(DATAEMI AS INT)&31),0))),2))=1 then LTRIM(STR(ROUND(((CAST(DATAEMI AS INT)&65024)/512)+1980,0)))+right('00'+LTRIM(STR(ROUND((CAST(DATAEMI AS INT)&480)/32,0))),2)+right('00'+LTRIM(STR(ROUND((CAST(DATAEMI AS INT)&31),0))),2)

else 0

end as dtemi

from tabela_documentos where TIPODOC<>98

 

codigo inteiro

Compartilhar este post


Link para o post
Compartilhar em outros sites

LTRIM(STR(ROUND(((CAST(DATAEMI AS INT)&65024)/512)

 

em oracle seria (creio)

 

LTRIM(to_char(ROUND(( mod ((CAST(DATAEMI AS number) 65024))/512)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.