2014-12-26 10 views
5

Mam pole TIMESTAMP (6) w Oracle i muszę usunąć składnik milisekundy od czasu.usuwanie milisekund z pola Oracle tmstmp

Na przykład mam

10/20/2014 10:34:06.356000 AM 

i chciałbym, aby usunąć milisekund, dzięki czemu mam

10/20/2014 10:34:06 AM 

Czy wiesz, że najlepszym sposobem, aby to zrobić?

Dziękujemy!

Odpowiedz

1

spróbować

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

jeśli trzeba datę 12-godzinny format

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

SQL FIDDLE

+0

to działa, ale potrzebuję, aby plik był znacznikiem czasu (0). kiedy uruchamiam twój kod, tracę AM/PM, a czas traci swój format GMT. Czy można go przesyłać do znacznika czasu (0)? to może działać – user3022875

+0

, jeśli potrzebujesz formatu 12 godzin z AM/PM, a następnie użyj drugiego zapytania – HaveNoDisplayName

+0

, ale nadal jest to CHAR. Potrzebuję znacznika czasu (0). czy to jest możliwe? – user3022875

3

Jak chodzi?

select cast(col as timestamp(0)) 

EDIT:

Najprostszym sposobem na uniknięcie zaokrąglenie jest użycie trunc() lub odjąć pół sekundy:

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

działa to, ale wykonuje zaokrąglenia. Czy istnieje sposób, aby go nie zaokrąglić i po prostu usunąć milisekundy bez zaokrąglania w górę lub w dół? – user3022875

-2

To może pomóc!

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

Można też rzucić go do datownik bez ułamków sekund (będzie okrągły z dokładnością do sekundy):

CAST(your_timestamp AS TIMESTAMP(0)) 

lub do typu danych DATE (będzie obciąć do najbliższej sekundy):

CAST(your_timestamp AS DATE) 

Jeśli chcesz go jako typ danych następnie wrzucił go z powrotem:

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

Albo można przekonwertować go do sformatowany ciąg i określić model format, którego chcesz używać (to obciąć z dokładnością do sekundy):

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

Jak to:

SQL Fiddle

Konfiguracja

Oracle 11g R2 Schemat:

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

Query 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 | 

uwaga: Jak TIMESTAMP i DATE są sformatowane w wyjściu będzie zależeć od parametrów sesji NLS_TIMESTAMP_FORMAT i NLS_DATE_FORMAT ale można bezpośrednio kontroluj formatowanie TO_CHAR po określeniu modelu formatu.

Powiązane problemy