Escolar Documentos
Profissional Documentos
Cultura Documentos
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
Gerenciando Dados em
Diferentes Fusos Horários
a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
S am able
i c ius nsfer
Vin n-tra
no
Faculdade Impacta Tecnologia
Objetivos
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
Agenda da Lição
•
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
CURRENT_DATE, CURRENT_TIMESTAMP
e LOCALTIMESTAMP
• Tipos de dados INTERVAL
• Usando as seguintes functions:
– EXTRACT
– TZ_OFFSET
– FROM_TZ
– TO_TIMESTAMP
a
– TO_YMINTERVAL
) has
– TO_DSINTERVAL
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
S am able
i c ius nsfer
Vin n-tra
no
Fusos Horários
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
-08:00 +07:00
+02:00 +10:00
-05:00
s a
a
)h ฺ
m
co uide
A imagem representa o horário i l ฺ
de cada fuso quando aghora ma de n t G
Greenwich é 12:00. a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
Fusos Horários
S am able
As horas do diausão
i c i s medidas
s f erpela rotação da Terra. O horário do dia em um determinado momento
dependerá
longo V
da Linha
an Internacional.
inde sua-detrlocalização.
Data
Quando for meio-dia em Greenwich, Inglaterra, será meia-noite ao
A Terra está dividida em 24 fusos horários, um para cada hora
n o n
do dia. O horário ao longo do principal meridiano em Greenwich, Inglaterra, é conhecido como
Tempo Médio de Greenwich, ou GMT. O GMT atualmente é conhecido como Coordinated Universal
Time - Hora Universal, ou UTC. O UTC é o horário padrão usado como referência por todos os
outros fusos horários do mundo. É igual durante todo o ano e não é afetado pela estação de verão
nem pelo horário de verão. A linha do meridiano é imaginária e se estende do Polo Norte ao Polo
Sul. É conhecida como de longitude zero e é a linha a partir da qual todas as outras linhas de
longitude são medidas. Todo o horário é medido em relação ao UTC e todos os locais têm uma
latitude (sua distância ao norte ou sul do Equador) e uma longitude (sua distância a leste ou oeste do
meridiano de Greenwich).
• Um deslocamento absoluto
• Fuso horário do banco de dados
• Fuso horário local do SO
• Uma região nomeada
ALTER SESSION SET TIME_ZONE = '-05:00';
ALTER SESSION SET TIME_ZONE = dbtimezone;
ALTER SESSION SET TIME_ZONE = local;
s a
ALTER SESSION SET TIME_ZONE = 'America/New_York'; a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
am able
Parâmetro de Sessão TIME_ZONE
S
i c ideussegundos.
O banco de dados
s f eOr comando
Oracle suporta armazenamento de fuso horário com seus dados de data e hora, bem
V i n tran
como frações ALTER SESSION pode ser usado para alterar os valores de
CURRENT_DATE, CURRENT_TIMESTAMP
e LOCALTIMESTAMP
•
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
CURRENT_DATE:
– Retorna a data atual da sessão do usuário
– Possui um tipo de dados de DATE
• CURRENT_TIMESTAMP:
– Retorna data/horário atuais da sessão do usuário
– Possui um tipo de dados de TIMESTAMP WITH TIME ZONE
• LOCALTIMESTAMP:
– Retorna data/horário atuais da sessão do usuário
s a
– Possui um tipo de dados de TIMESTAMP a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
am able
CURRENT_DATE, CURRENT_TIMESTAMP
S
e LOCALTIMESTAMP
i c iusUmntipo
As functions CURRENT_DATE
s federdados
e CURRENT_TIMESTAMP retornam a data e o timestamp atuais,
V i n tra
respectivamente. de CURRENT_DATE é DATE. O tipo de dados de
n-
CURRENT_TIMESTAMP
n o é TIMESTAMP WITH TIME ZONE. Os valores retornados exibem o
deslocamento do fuso horário da sessão SQL que executa as functions. O deslocamento do fuso
horário é a diferença (em horas e minutos) entre o horário local e o UTC (Coordinated Universal
Time). O tipo de dados de TIMESTAMP WITH TIME ZONE possui o formato:
TIMESTAMP [ (fractional_seconds_precision) ] WITH TIME ZONE
em que fractional_seconds_precision especifica, como opção, o número de dígitos na
parte fracional do campo de data/horário SECOND e pode ser um número no intervalo de 0 a 9. O
default é 6.
A function LOCALTIMESTAMP retorna a data e o horário atuais no fuso horário da sessão. A
diferença entre LOCALTIMESTAMP e CURRENT_TIMESTAMP é que LOCALTIMESTAMP retorna
um valor TIMESTAMP, enquanto CURRENT_TIMESTAMP retorna um valor TIMESTAMP WITH
TIME ZONE.
Essas functions são compatíveis com NLS (national language support)—isto é, os resultados estarão
nos formatos de calendário e data/horário de NLS atuais.
Observação: A function SYSDATE retorna a data e o horário atuais como um tipo de dados de
DATE. Você aprendeu a usar a function SYSDATE no curso Oracle Database 11g: Fundamentos de
SQL I.
Oracle Database 11g: Fundamentos de SQL II 5 - 6
Faculdade Impacta Tecnologia
Comparando Data/Horário no
Fuso Horário de uma Sessão
O parâmetro TIME_ZONE é definido como –5:00, e as
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
ALTER SESSION
SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
ALTER SESSION SET TIME_ZONE = '-5:00';
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;
SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;
SELECT SESSIONTIMEZONE, LOCALTIMESTAMP FROM DUAL;
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
Comparando Data/Horário
S am anobFuso le Horário de uma Sessão
O comando ALTER
i c
SESSION
s f er define o formato
ius HH24:MI:SS’—ou de data da sessão como
i n tran
'DD-MON-YYYY
V
seja, dia do mês (1–31)-nome abreviado do mês-hora do
Comparando Data/Horário no
Fuso Horário de uma Sessão
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
Resultados de consultas:
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
Comparando Data/Horário
S am anobFuso le Horário de uma Sessão (continuação)
i c s fer retornaretorna
ius nCURRENT_DATE
Neste caso, a function a data atual do fuso horário de uma sessão, a
V n tra
functioniCURRENT_TIMESTAMP a data e o horário do fuso horário de uma sessão como
DBTIMEZONE e SESSIONTIMEZONE
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
am able
DBTIMEZONE e SESSIONTIMEZONE
S
O DBA define u
i c s fer default. Sedoforbanco
i o sfusonhorário de dados ao especificar a cláusula SET TIME_ZONE
V i n tra
da instrução CREATE DATABASE omitido, o fuso horário default do banco de dados será o
fuso horário do
o n -sistema operacional. O fuso horário do banco de dados não pode ser alterado em uma
n
sessão com uma instrução ALTER SESSION.
A function DBTIMEZONE retorna o valor do fuso horário do banco de dados. O tipo de retorno é um
deslocamento de fuso horário (um tipo de caractere no formato: '[+|-]TZH:TZM') ou um nome
de região de fuso horário, dependendo de como o usuário especificou o valor do fuso horário do
banco de dados na instrução CREATE DATABASE ou ALTER DATABASE mais recente. O exemplo
do slide mostra que o fuso horário do banco de dados foi definido como “–05:00,” pois o parâmetro
TIME_ZONE está no formato:
TIME_ZONE = '[+ | -] hh:mm'
A function SESSIONTIMEZONE retorna o valor do fuso horário da sessão atual. O tipo de retorno é
um deslocamento de fuso horário (um tipo de caractere no formato '[+|-]TZH:TZM') ou um
nome de região de fuso horário, dependendo de como o usuário especificou o valor do fuso horário
da sessão na instrução ALTER SESSION mais recente. O exemplo do slide mostra que o fuso horário
da sessão é o deslocamento para UTC em –8 horas. Observe que o fuso horário do banco de dados é
diferente do da sessão atual.
V in -tran
TIMESTAMP (fractional_seconds_
minuto e n
on contém os valores de data de ano, mês e dia, além dos valores de tempo de hora,
Este tipo de dados
segundo, em que a precisão significativa de frações de segundos é o número de dígitos na
parte fracional do campo de data/horário SECOND. Os valores aceitos de
fractional_seconds_precision significativos estão entre 0 e 9. O default é 6.
TIMESTAMP (fractional_seconds_precision) WITH TIME ZONE
Esse tipo de dados contém todos os valores de TIMESTAMP, bem como o valor de deslocamento do
fuso horário.
TIMESTAMP (fractional_seconds_precision) WITH LOCAL TIME ZONE
Esse tipo de dados contém todos os valores de TIMESTAMP, com as seguintes exceções:
• Os dados são normalizados para o fuso horário do banco de dados quando são armazenados no
banco de dados.
• Quando os dados são recuperados, os usuários vêem os dados no fuso horário da sessão.
Campos de TIMESTAMP
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
p aio licen
Campos de TIMESTAMP
S am able
Cada tipo de dados
i c i s f er é composto de vários desses campos. Datas/horários só serão
us de data/horário
Vin n-tran
mutuamente comparáveis e atribuíveis se tiverem os mesmos campos de data/horário.
no
A B
-- when hire_date is ALTER TABLE employees
of type DATE MODIFY hire_date TIMESTAMP;
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
… amp his S
i u sls use t
i n icOracle. Todos
to os direitos reservados.
( v
Copyright © 2009,
s e
p aio licen
Tipo de Dados de TIMESTAMP:
S am ableExemplo
No slide, o exemplo
i c
s A mostra
iucoluna s f er os Nodados da coluna hire_date da tabela EMPLOYEES quando o
V i n tran
tipo de dados da é DATE. exemplo B, a tabela é alterada e o tipo de dados da coluna
hire_daten é -transformado em TIMESTAMP. A saída mostra as diferenças na exibição. Você pode
n o
converter de DATE para TIMESTAMP quando a coluna tiver dados, mas não pode converter de DATE
ou TIMESTAMP para TIMESTAMP WITH TIME ZONE, a menos que a coluna esteja vazia.
É possível especificar a precisão de fração de segundos do timestamp. Se nenhuma for especificada,
como neste exemplo, o valor definido como default será 6.
Por exemplo, a instrução a seguir define a precisão de fração de segundos como 7:
ALTER TABLE employees
MODIFY hire_date TIMESTAMP(7);
Observação: O tipo de dados de data do Oracle aparece por default como mostrado neste exemplo.
Entretanto, o tipo de dados de data também contém informações adicionais como horas, minutos,
segundos, AM e PM. Para obter a data nesse formato, você pode aplicar uma máscara de formato ou
uma function no valor de data.
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
Comparando Tipos dem
S a Dados b
de
l e TIMESTAMP
s umafenova
No exemplo douslide,
i ra tabela web_orders é criada com uma coluna de tipo de dados
TIMESTAMP
V i nic WITH
t r a ns ZONE e uma coluna de tipo de dados TIMESTAMP WITH LOCAL
TIME
TIME ZONE.nEssa
o - tabela é preenchida sempre que uma web_order é emitida. O timestamp
n
e o fuso horário do usuário que emite a ordem é inserido com base no CURRENT_DATE value.
O timestamp e o fuso horário locais são preenchidos inserindo-se dois dias a partir do valor de
CURRENT_TIMESTAMP para ambos sempre que uma ordem é emitida. Quando uma empresa
baseada na web garante a remessa, ela pode estimar o prazo de entrega com base no fuso horário da
pessoa que emite a ordem.
Agenda da Lição
•
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
CURRENT_DATE, CURRENT_TIMESTAMP
e LOCALTIMESTAMP
• Tipos de dados de INTERVAL
• Usando as seguintes functions:
– EXTRACT
– TZ_OFFSET
– FROM_TZ
– TO_TIMESTAMP
a
– TO_YMINTERVAL
) has
– TO_DSINTERVAL
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
S am able
i c ius nsfer
Vin n-tra
no
(fractional_seconds_precision)
Este tipo de dados armazena um período em dias, horas, minutos e segundos, em que
day_precision é o número máximo de dígitos no campo de data/horário DAY (os valores aceitos
estão entre 0 e 9, o default é 2) e fractional_seconds_precision é o número de dígitos da
parte fracional do campo SECOND. Os valores aceitos estão entre 0 e 9. O default é 6.
a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no
Campos INTERVAL
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
MONTH 00 a 11
HOUR 00 a 23
a
MINUTE 00 a 59
) has
SECOND 00 a 59,9(N) em que 9(N) é a precisão
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
Campos INTERVAL
S am able
INTERVAL YEAR
i c ius TOnMONTH
s fer pode ter campos para YEAR e MONTH.
Vin DAY
INTERVAL
- t r
TOa SECOND podem ter campos para DAY, HOUR, MINUTE e SECOND.
onreal de campos que constitui um item do tipo de intervalo é definido por um
O subconjunto
n
qualificador de intervalo e esse subconjunto é conhecido como precisão do item.
Os intervalos de ano-mês são mutuamente comparáveis e atribuíveis apenas a outros intervalos de
ano-mês, e os de dia-hora são mutuamente comparáveis e atribuíveis somente a outros intervalos de
dia-hora.
p aio licen
S am abYEAR
Tipo de Dados de INTERVAL le TO MONTH
INTERVAL YEAR
i c fer armazena
ius TOnINTERVAL
MONTH
s
um período usando os campos de data/horário YEAR e
V n tra
MONTH. iEspecifique YEAR TO MONTH como se segue:
INTERVAL n - [(year_precision)] TO MONTH
o YEAR
n
em que year_precision é o número de dígitos no campo de data/horário YEAR. O valor default
de year_precision é 2.
Restrição: O campo inicial deve ser mais significativo do que o campo final. Por exemplo,
INTERVAL '0-1' MONTH TO YEAR não é válido.
Exemplos
• INTERVAL '123-2' YEAR(3) TO MONTH
Indica um intervalo de 123 anos, 2 meses
• INTERVAL '123' YEAR(3)
Indica um intervalo de 123 anos, 0 meses
• INTERVAL '300' MONTH(3)
Indica um intervalo de 300 meses
• INTERVAL '123' YEAR
Retorna um erro porque a precisão default é 2, e 123 possui 3 dígitos
No exemplo do slide, é criada uma tabela WARRANTY, que contém uma coluna warranty_time
que aceita o tipo de dados INTERVAL YEAR(3) TO MONTH. Valores diferentes são inseridos nela
para indicar anos e meses de vários produtos. Quando essas linhas são recuperadas da tabela, você vê
o valor do ano separado do valor do mês por um (-).
a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no
s a
SELECT * FROM lab; a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
Tipo de Dados de INTERVAL
S am abDAY le TO SECOND: Exemplo
i s nvocê
No exemplo douslide, r criando a tabela de laboratório com uma coluna test_time do tipo
eestá
fDAY
deic
de dadosin s TO SECOND. Em seguida, insira nela o valor “90 00:00:00” para
V
INTERVAL
indicar 90 dias t r a
e- 0 horas, 0 minutos, 0 segundos e INTERVAL '6 03:30:16' DAY TO
n o n
SECOND para indicar 6 dias, 3 horas, 30 minutos e 16 segundos. A instrução SELECT mostra como
esses dados são exibidos no banco de dados.
Agenda da Lição
•
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
CURRENT_DATE, CURRENT_TIMESTAMP
e LOCALTIMESTAMP
• Tipos de dados de INTERVAL
• Usando as seguintes functions:
– EXTRACT
– TZ_OFFSET
– FROM_TZ
– TO_TIMESTAMP
a
– TO_YMINTERVAL
) has
– TO_DSINTERVAL
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
S am able
i c ius nsfer
Vin n-tra
no
EXTRACT
p aio licen
EXTRACT
S am able
i c i us sextrai
A expressão EXTRACT
f er e retorna o valor de um campo de data/horário especificado de uma
expressãoinde valor
sintaxeVanterior - t r adendata/horário
usando a function
ou intervalo. Você pode extrair qualquer componente citado na
A sintaxe da function EXTRACT é:
nonEXTRACT ([YEAR] [MONTH][DAY] [HOUR] [MINUTE][SECOND]
EXTRACT.
SELECT
[TIMEZONE_HOUR] [TIMEZONE_MINUTE]
[TIMEZONE_REGION] [TIMEZONE_ABBR]
FROM [datetime_value_expression] [interval_value_expression]);
Quando você extrai TIMEZONE_REGION ou TIMEZONE_ABBR (abreviação), o valor retornado é
uma string que contém o nome ou a abreviação do fuso horário apropriado. Quando extrai qualquer
um dos outros valores, o valor retornado é uma data do calendário gregoriano. Durante a extração de
data/horário com um valor de fuso horário, o valor retornado está em UTC.
No primeiro exemplo do slide, a function EXTRACT é usada para extrair YEAR de SYSDATE. No
segundo exemplo do slide, a function EXTRACT é usada a fim de extrair MONTH da coluna
HIRE_DATE da tabela EMPLOYEES para os funcionários que reportam ao gerente cujo
EMPLOYEE_ID seja 100.
TZ_OFFSET
SELECT TZ_OFFSET('US/Eastern'),
TZ_OFFSET('Canada/Yukon'),
TZ_OFFSET('Europe/London')
FROM DUAL;
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
TZ_OFFSET
S am able
i c i er o deslocamento de fuso horário correspondente ao valor informado.
us sfretorna
A function TZ_OFFSET
Vin nretornar tr num valor –08:00, esse valor indicará que o fuso horário em que o comando foi
O valor de retorno a depende da data em que a instrução é executada. Por exemplo, se a function
TZ_OFFSET -
o oito horas atrás do UTC. Você pode informar um nome de fuso horário válido, um
executadonestá
deslocamento de fuso horário do UTC (que retorna a si mesmo) ou a palavra-chave
SESSIONTIMEZONE ou DBTIMEZONE. A sintaxe da function TZ_OFFSET é:
TZ_OFFSET ( ['time_zone_name'] '[+ | -] hh:mm' ]
[ SESSIONTIMEZONE] [DBTIMEZONE]
A Ford Motor Company possui sede em Michigan, EUA, cujo fuso horário é o do leste dos Estados
Unidos. O presidente da empresa, sr. Ford, deseja conduzir uma conference call com os vice-
presidentes de operações do Canadá e da Europa, que estão nos fusos horários de Canadá/Yukon e
Europa/Londres, respectivamente. O sr. Ford deseja saber o horário em cada um desses locais para
confirmar a participação de sua gerência na reunião. Seu assistente, o sr. Scott, ajuda emitindo as
consultas mostradas no exemplo e obtém os seguintes resultados:
• O fuso horário 'US/Eastern' está atrasado quatro horas em relação ao UTC.
• O fuso horário 'Canada/Yukon' está atrasado sete horas em relação ao UTC.
• O fuso horário 'Europe/London' está uma hora adiantado em relação ao UTC.
TZ_OFFSET (continuação)
Para obter uma lista de valores de nome de fuso horário válidos, você pode consultar a view
dinâmica de desempenho V$TIMEZONE_NAMES.
SELECT * FROM V$TIMEZONE_NAMES;
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
… i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no
FROM_TZ
SELECT FROM_TZ(TIMESTAMP
'2000-07-12 08:00:00', 'Australia/North')
FROM DUAL;
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
FROM_TZ
S am able
A function FROM_TZ
ZONE . inic s fer um valor de TIMESTAMP em um valor de TIMESTAMP WITH TIME
ius nconverte
V n-tra FROM_TZ é:
A sintaxe daofunction
n
FROM_TZ(TIMESTAMP timestamp_value, time_zone_value)
em que time_zone_value é uma string de caracteres no formato 'TZH:TZM' ou uma expressão
de caracteres que retorna uma string em TZR (região de fuso horário) com um formato TZD opcional.
TZD é uma string de fuso horário abreviada com informações sobre o horário de verão. TZR
representa a região do fuso horário nas strings de entrada de data/horário. 'Australia/North' e
'PST' são exemplos para o horário padrão EUA/Pacífico, 'PDT' para horário de verão
EUA/Pacífico etc.
O exemplo do slide converte um valor de TIMESTAMP em TIMESTAMP WITH TIME ZONE.
Observação: Para exibir uma lista de valores válidos para os elementos de formato TZR e TZD,
consulte a view dinâmica de desempenho V$TIMEZONE_NAMES.
TO_TIMESTAMP
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
TO_TIMESTAMP
S am able
i c iusem um
A function TO_TIMESTAMP
s f er converte uma string de CHAR, VARCHAR2, NCHAR ou o tipo de dados
V i n tran
de NVARCHAR2 valor do tipo de dados TIMESTAMP. A sintaxe da function
TO_TIMESTAMP n- é:
noTO_TIMESTAMP (char,[fmt],['nlsparam'])
O fmt opcional especifica o formato de char. Se você omitir fmt, a string deverá estar no formato
default do tipo de dados TIMESTAMP. O nlsparam opcional especifica o idioma no qual
abreviações e nomes de mês e dia são retornados. Este argumento pode ter o seguinte formato:
'NLS_DATE_LANGUAGE = language'
Se você omitir nlsparams, essa function usará o idioma de data default para sua sessão.
O exemplo do slide converte uma string de caracteres em um valor de TIMESTAMP.
Observação: Você pode usar a function TO_TIMESTAMP_TZ para converter uma string de CHAR,
VARCHAR2, NCHAR, ou de tipo de dados NVARCHAR2 em um valor do tipo de dados TIMESTAMP
WITH TIME ZONE . Para obter mais informações sobre essa function, consulte Oracle Database
SQL Language Reference 11g Release 1 (11.1).
TO_YMINTERVAL
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
SELECT hire_date,
hire_date + TO_YMINTERVAL('01-02') AS
HIRE_DATE_YMININTERVAL
FROM employees
WHERE department_id = 20;
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
TO_YMINTERVAL
S am able
s fer converte uma string de caracteres de CHAR, VARCHAR2, NCHAR, ou
A function TO_YMINTERVAL
iuNVARCHAR2
tipo de dados
i c
n trans em um tipo de dados de INTERVAL YEAR TO MONTH. O tipo de
i de
V
dados de INTERVAL
n - YEAR TO MONTH armazena um período usando os campos de data/horário
n o
YEAR e MONTH. O formato de INTERVAL YEAR TO MONTH é:
INTERVAL YEAR [(year_precision)] TO MONTH
em que year_precision é o número de dígitos no campo de data/horário YEAR. O valor default
de year_precision é 2.
A sintaxe da function TO_YMINTERVAL é:
TO_YMINTERVAL (char)
em que char é a string de caracteres a ser convertida
O exemplo no slide calcula uma data de um ano e dois meses após a data de contratação dos
funcionários do departamento 20 da tabela EMPLOYEES.
TO_DSINTERVAL
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
SELECT last_name,
TO_CHAR(hire_date, 'mm-dd-yy:hh:mi:ss') hire_date,
TO_CHAR(hire_date +
TO_DSINTERVAL('100 10:00:00'),
'mm-dd-yy:hh:mi:ss') hiredate2
FROM employees;
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
… a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
TO_DSINTERVAL
S am able
s converteruma string de caracteres de CHAR, VARCHAR2, NCHAR, ou de tipo de
iciu ansemfeum tipo de dados de INTERVAL DAY TO SECOND.
TO_DSINTERVAL
dados dein
NVARCHAR2
V n-slide,
No exemploodo
tr a data de 100 dias e 10 horas após a contratação é obtida.
n
Horário de Verão
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
DST (Horário de Verão)
S am able
i c us ocidentais
A maioria dos países
i s f er avança o relógio uma hora durante os meses de verão. O período é
chamadoinde horárioade
r n verão. O horário de verão compreende o primeiro domingo de abril até o
últimoVdomingon - t
de outubro na maioria dos Estados Unidos, México e Canadá. Os países da União
n o
Europeia cumprem o horário de verão, mas eles o chamam de período de verão. O período de verão
da Europa começa uma semana antes de sua contrapartida norte-americana, mas termina na mesma
época.
O banco de dados Oracle verifica automaticamente, para qualquer região de fuso horário, se o horário
de verão está em vigor e retorna os valores respectivos ao horário local. O valor de data/horário é
suficiente para o banco de dados Oracle verificar se o horário de verão está em vigor em uma
determinada região em todos os casos, exceto casos de limite. Um caso de limite ocorre durante o
período de início ou término do horário de verão. Por exemplo, na região EUA/Oriental, quando o
horário de verão entra em vigor, o horário é alterado de 01:59:59 para 03:00:00. O intervalo de uma
hora entre 02:00:00 e 02:59:59 não existe. Quando o horário de verão termina, o horário é alterado de
02:00:00 para 01:00:01, e o intervalo de uma hora entre 01:00:01 e 02:00:00 é repetido.
Por exemplo, o horário de verão termina em 31 de outubro, às 02:00:01. Os períodos sobrepostos são:
• 31/10/2004 01:00:01 a 31/10/2004 02:00:00 (EDT)
• 31/10/2004 01:00:01 a 31/10/2004 02:00:00 (EST)
Se você inserir uma string de data/horário que ocorra em um desses dois períodos, deverá especificar
a abreviação do fuso horário (por exemplo, EDT ou EST) na string de entrada para que o sistema
determine o período. Sem essa abreviação do fuso horário, o sistema faz o seguinte:
Se o parâmetro ERROR_ON_OVERLAP_TIME for FALSE, ele considerará que o horário de entrada
é o padrão (por exemplo, EST). Caso contrário, um erro será indicado.
a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no
Quiz
1. Um deslocamento relativo
2. Fuso horário do banco de dados
3. Fuso horário local do SO
4. Uma região nomeada
a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
Respostas: 2, 3, 4 am le
S a b
i c ius nsfer
Vin n-tra
no
Resumo
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
p aio licen
Resumo
S am able
i desalgumas
Esta lição tratau
f r functions de data/horário disponíveis no banco de dados Oracle.
edas
i c s
Vin n-tran
no
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos
p aio licen
am able
Exercício 5: Visão Geral
S
Neste exercício, s exibe
iuvocê f r deslocamentos de fuso horário, CURRENT_DATE,
os
ee LOCALTIMESTAMP.
i i c
n tran
CURRENT_TIMESTAMP s Define também os fusos horários e usa a function
V
EXTRACT. n-
no
Exercício 5
1. Altere a sessão para definir NLS_DATE_FORMAT como DD-MON-YYYY HH24:MI:SS.
2. a. Crie consultas para exibir os deslocamentos do fuso horário (TZ_OFFSET) para os
seguintes fusos horários.
- EUA/Pacífico-Novo
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
- Cingapura
- Egito
s a
)h ฺa
m
co uide
i l ฺ
g ma nt G
b. Altere a sessão a fim de definir o valor do parâmetroio @ udepara o deslocamento
p is St
a TIME_ZONE
do fuso horário de EUA/Pacífico-Novo. m
sa e ethLOCALTIMESTAMP para
c. Exiba CURRENT_DATE, CURRENT_TIMESTAMP s l
esta sessão.
i n iciu to us
i o (v nse
p a lice
S am able
i c iuassessãos f efimr de definir o valor do parâmetro TIME_ZONE para o deslocamento
d. n
Altere
Vi do fuso- t r an de Cingapura.
horário
a
Exercício 5 (continuação)
4. Crie uma consulta para extrair YEAR da coluna HIRE_DATE da tabela EMPLOYEES para os
funcionários que trabalham no departamento 80.
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
s a
a
) h Selecione
b. Modifique o tipo de dados da coluna DATE_COL e altere-o para TIMESTAMP. m
co uideฺ
na tabela para exibir os dados. i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
c. Tente modificar o tipo de dadosic daiu
s us e
coluna DATE_COL e altere-o para TIMESTAMP WITH
i n t o
TIME ZONE. O que acontece?
i o (v nse
p a lice
7. Crie uma consulta m recuperar
apara b le os sobrenomes com base na tabela EMPLOYEES e calcular o
status da u
S a
s fSeero ano de contratação for 1998, exiba Needs Review para o status da
i c iavaliação.
s
V i n trancontrário,
avaliação, caso exiba not this year! Nomeie a coluna de status da avaliação
como Review.
o n - Classifique os resultados pela coluna HIRE_DATE.
n
Dica: Use uma expressão CASE com a function EXTRACT para calcular o status da avaliação.
Exercício 5 (continuação)
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no
Exercício 5 (continuação)
8. Crie uma consulta para imprimir os sobrenomes e o número de anos de serviço de cada
funcionário. Se o funcionário tiver sido empregado por cinco ou mais anos, imprima 5 years
of service. Se o funcionário tiver sido empregado por 10 ou mais anos, imprima 10 years
of service. Se o funcionário tiver sido empregado por 15 ou mais anos, imprima 15 years
of service. Se nenhuma dessas condições for atendida, imprima maybe next year!
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ
a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no
a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no