2016-03-22 11 views
0

'ddmmyyyy' biçiminde varchar2'de bir tarihim var ve bunu 'yyyy-mm-ddThh biçimine dönüştürmek istiyorum: mm: ssZ 'son değişkenin bir tarih saat formatına sahip olduğu.Oracle: varchar2'yi datetime biçimine dönüştür 'yyyy-mm-ddThh: dd: ssZ'

Örneğin, aşağıdaki varchar2 değişken variable1 sahiptir:

variable1 := '11092016';

ve nihai sonucu istiyorum: variable2 bir varchar2 değil ama diğer herhangi bir tarih saat biçimi vardır

variable2:='2016-09-11T00:00:00Z'

.

Bana yardım edebilir misiniz, lütfen?

+1

"date2 bir varchar2 değil, başka bir tarih saatine sahip değil" ne demektir? Belirli bir biçimde bir tarihi temsil eden bir dizeye sahip olabilirsiniz; bu durumda bir "varchar2" 'ye sahip olabilirsiniz veya bir "tarih" veya "timestamp" değerine sahip olabilirsiniz. –

+0

Not 'Z'' UTC' saat dilimini ifade eder - bu durumda mı yoksa bir dönüşüme mi ihtiyacınız var? –

+0

@WernfriedDomscheit evet saat dilimi UTC ... 'vari1' olarak bir varchar2 sahip dönüştürmek istiyorum – porthfind

cevap

0

Tarihler bir biçim içermiyor. Biçim, bunları bir dizeye veya istemci yazılımına dönüştürerek uygulanır. Eğer sadece bir tarih olarak istiyorum o zaman TO_DATE(value, 'DDMMYYYY') kullanmak (ve tarih nesnesi 00:00:00 ayarlı zaman bileşeni olacaktır) ancak bir ISO8601 biçimlendirilmiş dize olarak isterseniz:

Oracle Kurulumu:

CREATE TABLE dates (value) AS 
SELECT '20032016' FROM DUAL; 

Sorgu:

SELECT TO_CHAR(
     TO_DATE(value, 'DDMMYYYY'), 
     'YYYY-MM-DD"T"HH24:MI:SS"Z"' 
     ) AS ISODate 
FROM dates; 

Çıktı:

ISODATE 
-------------------- 
2016-03-20T00:00:00Z  
+0

ISODATE bir varchar olacaktır, tarih saatine sahip olmayacaksınız. – porthfind

+0

Düzenleme bölümümde, bir biçim bulunmuyor (bunların nasıl oluşturulduğuna bağlı olarak dahili olarak 7 veya 8 bayt olarak gösteriliyor). Bir tarihin bir formatı olmasını istiyorsanız, o zaman bir dizgeye (oracle içinde veya sorguları gerçekleştirmek için kullandığınız istemcide) dönüştürmeniz gerekir. – MT0