Chiappa Ótima explicação sobre NLS_TERRITORY versus dia da semana. Valeu!
[ ] André Em 16 de outubro de 2014 11:32, jlchia...@yahoo.com.br [oracle_br] < oracle_br@yahoogrupos.com.br> escreveu: > > > Opa, blz ? Então, é totalmente possível sim, e tem trocentas maneiras de > fazer : pode fazer com artimética de datas (ie, ver se o valor da coluna > DATE vc já passou exatamente um múltiplo de 7 dias de um dia no passado que > foi 5ª feira), pode usar uma expressão com uma das n+1! funções que > calculam número do dia da semana e/ou extraem o nome do dia da semana, á > sua vontade... > Eu acho mais simples usar uma expressão com uma das funções (e ** > Certamente ** vc vai receber outras sugestões nesse sentido, isso é mais ou > menos o método preferido), apenas aviso que : > > a) para programar defensivamente, sempre que vc trabalha com datas vc ** > TEM ** que se precaver da possibilidade do database aonde o seu código vai > rodar estar com configurações de data/calendário/linguagem/território (o > chamado NLS) não-padrão... Por exemplo : > > SQL> alter session set nls_territory = 'AMERICA'; > SQL> select level as dow, > to_char(trunc(sysdate ,'D') + level, 'Day') as day > from dual > connect by level <= 7; > > DOW DAY > --- ------------------------------------ > 1 Monday > 2 Tuesday > 3 Wednesday > 4 Thursday > 5 Friday > 6 Saturday > 7 Sunday > > PORÉM : > > SQL> alter session set nls_territory = 'UNITED KINGDOM'; > > SQL> select level as dow, > to_char(trunc(sysdate ,'D') + level, 'Day') as day > from dual > connect by level <= 7; > > DOW DAY > --- ------------------------------------ > 1 Tuesday > 2 Wednesday > 3 Thursday > 4 Friday > 5 Saturday > 6 Sunday > 7 Monday > > Vê ?? Databases configurados diferentemente podem dar NOMES diferentes > para os dias da semana, podem numerar os dias da semana diferentemente .... > Aí então se vc tivesse escrito um : > > WHERE TRUNC(colunadata, 'D') = 'numerodaquinta-feira' > > SEM especificar NLS o teu código poderia falhar... EXATAMENTE por isso > que praticamente TODAS as funções que trabalham com datas possuem um > parâmetro NLS_LANGUAGE, NLS_TERRITORY ou equivalentes Justamente para vc > indicar os formatos que está assumindo no seu código, yep yep ?? > > b) SE vc vai recuperar grande parte dos dados da tabela ok, não se > preocupe, MAS se vai recuperar relativamente poucas linhas comparando com o > total, pode ser que seja útil um índice na coluna : nesse caso, fique > CIENTE que qualquer função aplicada na coluna indexada DESABILITA o uso do > índice 'normal', então talvez vc tenha que criar um índice de função > > > ==> para ambas as obs, Veja lá na documentação Oracle para mais dets e > refs... > > []s > > Chiappa > >