2014-12-26 25 views
5

Oracle'da bir TIMESTAMP (6) alanım var ve o andan itibaren milisaniye bileşenini kaldırmam gerekiyor. Örneğinoracle tmstmp alanından milisaniye çıkarma

Ben

10/20/2014 10:34:06.356000 AM 

var ve

10/20/2014 10:34:06 AM 

var ki ben bunu yapmanın en iyi yolu biliyor musunuz milisaniye kaldırmak istiyorsunuz?

Teşekkür ederiz!

cevap

1

deneyin bu

SELECT TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW" 
FROM DUAL; 

Nasıl bu konuda

SELECT TO_CHAR(SYSDATE, 'MM-DD-YYYY HH:MI:SS AM') "NOW" 
FROM DUAL; 

SQL FIDDLE

+0

bu, ancak bir zaman damgası (0) olmak için dosyalanan gerekir. Kodunuzu çalıştırdığımda AM/PM'yi kaybederim ve zaman GMT formatını kaybeder. Bir zaman damgasına dönüştürülebilir mi (0)? Daha sonra AM/PM ile 12 saat formatına ihtiyacınız varsa – user3022875

+0

çalışabilir, ancak ikinci sorguyu – HaveNoDisplayName

+0

kullanın ancak bu hala bir CHAR'dır. Zaman damgasına ihtiyacım var (0). mümkün mü? – user3022875

3

12-saatlik tarih biçimini gerekirse?

select cast(col as timestamp(0)) 

DÜZENLEME:

select cast(col - 0.5/(24*60*60) as timestamp(0)) 
+0

bu işe yarıyor ama yuvarlanıyor. Yuvarlama yapmanın ve milisaniyeyi yuvarlamadan veya indirmeden kaldırmanın bir yolu var mı? – user3022875

-2

Bu yardımcı olabilir:

yuvarlama önlemek için en kolay yolu trunc() kullanmak veya yarım saniye çıkarmak olduğunu!

select substr(to_char('10/20/2014 10:34:06.356000 AM'),1,instr(to_char('10/20/2014 10:34:06.356000 AM'),'.')-1)||' '|| 
substr(to_char('10/20/2014 10:34:06.356000 AM'),-2,instr(to_char('10/20/2014 10:34:06.356000 AM'),'.')-1) "Date" 
from dual; 
0

Sen (bu yuvarlak en yakın ikinci olacak) hiçbir fraksiyonel saniye kala bir zaman damgası yayınlayabilmek için ya:

CAST(your_timestamp AS TIMESTAMP(0)) 

Veya DATE veri türüne

(bu en yakın ikinci keser): bir veri türü olarak isterseniz

CAST(your_timestamp AS DATE) 

sonra geri dökme:

CAST(CAST(your_timestamp AS DATE) AS TIMESTAMP(0)) 

Yoksa biçimlendirilmiş bir dizeye dönüştürmek ve (bu en yakın ikinci keser) kullanmak istediğiniz biçim modelini belirtebilirsiniz: Bunun gibi

TO_CHAR(your_timestamp, 'YYYY-MM-DD HH24:MI:SS') 

:

SQL Fiddle

Oracle 11g R2, Şema Kurulum:

CREATE TABLE your_table (your_timestamp) AS 
    SELECT TIMESTAMP '2017-10-25 12:53:12.10076' FROM DUAL; 

Sorgu 1:

SELECT CAST(your_timestamp AS TIMESTAMP(0)) AS "Timestamp", 
     CAST(your_timestamp AS DATE) AS "Date", 
     TO_CHAR(your_timestamp, 'DD-MM-YYYY HH24:MI:SS') AS "String" 
FROM your_table 

Results:

|    Timestamp |     Date |    String | 
|-----------------------|----------------------|---------------------| 
| 2017-10-25 12:53:12.0 | 2017-10-25T12:53:12Z | 25-10-2017 12:53:12 | 

not: TIMESTAMP ve DATE çıktıda biçimlendirilir nasıl NLS_TIMESTAMP_FORMAT ve NLS_DATE_FORMAT seans parametrelerine bağlı olacaktır ama doğrudan can Bir biçim modeli belirttiğinizde TO_CHAR formatlamasını kontrol edin.