Kategoriler
ORACLE

Oracle Database 11g – SQL Temelleri II || Different Time Zones

Diğer dersleri https://selimkaratas.com.tr/oracle-11g-r2-egitimi-ders-notlari adresinden bulabilirsiniz.

time zone

ALTER SESSION sadece bizim çalıştığımız session’da değişim yapar.

ALTER SYSTEM tamamen sistemi değiştir demektir.

ALTER SESSION SET TIME_ZONE = '-3:00';
-- 3 saat geriye alır.
SELECT SESSIONTIMEZONE, LOCALTIMESTAMP FROM DUAL;
--bağlı bulunduğumuz lokaldeki zamanı ayarlar.
ALTER SESSION SET TIME_ZONE = dbtimezone;
--database'in bulunduğu zamanı yerin zamanına göre ayarlar.
ALTER SESSION SET TIME_ZONE = 'America/New_York';
-- America NY'ye göre zamanı ayarlar

• CURRENT_DATE:  

— Aynı SYSDATE gibi gün-ay-yıl detayını gösterir.

• CURRENT_TIMESTAMP:

–En Detaylı tarih gösterimi

• LOCALTIMESTAMP:

— Lokal olmayı kabul ettiğimiz için (fonksiyon kullanarak )zaman diliminin görülmesini söz konusu değildir.

Bunlar tarih detayı gösterebilme detayına sahip olan fonksiyonlardır.

ALTER SESSION
SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';

--default format DD-MON-RR'dir ama biz alter session ile yukarıdaki hale getiririz.
ALTER SESSION SET TIME_ZONE = '-3:00';
--3 saat geriye alıyoruz
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

SET TIME_ZONE

SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;

SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;

SELECT SESSIONTIMEZONE, LOCALTIMESTAMP FROM DUAL;

SELECT SESSIONTIMEZONE, LOCALTIMESTAMP FROM DUAL;

insert into emp_history values (210, sysdate, 5000);

alter table emp_history modify hiredate timestamp;

select * from emp_history;

--hire date kolununun tarih dipini timesamp yaptık.

select * from emp_history;

00:00 olmasının nedeni değişiklik zamanını bilememesidir.  Insert ettiğimiz tablonun detayını ise aşağıdaki gibi gösterecektir.

select * from emp_history;

INTERVAL YEAR TO MONTH

CREATE TABLE warranty
(prod_id number, warranty_time INTERVAL YEAR(3) TO
MONTH);
INSERT INTO warranty VALUES (678, '200-11');

warranty

INTERVAL DAY TO SECOND

CREATE TABLE lab
( exp_id number, test_time INTERVAL DAY(2) TO SECOND);
INSERT INTO lab VALUES (100012, '90 00:00:00');

lab

Tarih Alanları ile ilgili Fonksiyonlar

– EXTRACT
– TZ_OFFSET
– FROM_TZ
– TO_TIMESTAMP
– TO_YMINTERVAL
– TO_DSINTERVAL

SELECT EXTRACT (YEAR FROM SYSDATE) FROM DUAL;
-- bulunduğumuz tarihin yıl detayını getirir.

SELECT EXTRACT (YEAR FROM SYSDATE) FROM DUAL;
TZ_OFFSET  — çok kullanılmaz

SELECT 
TZ_OFFSET('Europe/Istanbul'),
TZ_OFFSET('Europe/Paris')
FROM DUAL;
-- Greenwich'e göre bölgelerin bulunduğu zaman dilimi

SELECT  TZ_OFFSET('Europe/Istanbul'), TZ_OFFSET('Europe/Paris') FROM DUAL;

SELECT * FROM V$TIMEZONE_NAMES;
-- bölgelerin isimleri

SELECT * FROM V$TIMEZONE_NAMES;

FROM_TZ — çok kullanılmaz

SELECT FROM_TZ(TIMESTAMP
'2000-07-12 08:00:00', 'Australia/North')
FROM DUAL;

 TO_TIMESTAMP

SELECT TO_TIMESTAMP ('2014-02-27 07:27:30',
'YYYY-MM-DD HH:MI:SS')
FROM DUAL;

SELECT TO_TIMESTAMP ('2014-02-27 07:27:30', 'YYYY-MM-DD HH:MI:SS') FROM DUAL;

 TO_YMINTERVAL

SELECT hire_date,
hire_date + TO_YMINTERVAL('02-03') 
FROM employees
WHERE department_id = 20;

--hire_date alanına 2 yıl 3 ay ekle.

SELECT hire_date, hire_date + TO_YMINTERVAL('02-03')  FROM employees WHERE department_id = 20;

TO_DSINTERVAL

SELECT last_name,
TO_CHAR(hire_date, 'mm-dd-yy:hh:mi:ss') hire_date,
TO_CHAR(hire_date +
TO_DSINTERVAL('75 7:00:00'),
'mm-dd-yy:hh:mi:ss') hiredate2
FROM employees;-- hire_date alanına 75 gün 7 saat ekle.

SELECT last_name, TO_CHAR(hire_date, 'mm-dd-yy:hh:mi:ss') hire_date, TO_CHAR(hire_date + TO_DSINTERVAL('75 7:00:00'), 'mm-dd-yy:hh:mi:ss') hiredate2 FROM employees;

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir