2012-08-21 25 views
6

Có cách nào để loại bỏ độ chính xác khỏi kết quả của hàm NOW() trong PostgreSQL không?Xóa chính xác TIMESTAMP khỏi NOW() dẫn đến PostgreSQL?

"2012-08-21 10:23:34.867502" 

Tôi đang tìm cho định dạng là:

"2012-08-21 10:23:34" 

Tôi đang cố gắng để cập nhật một cột kiểu "dấu thời gian mà không cần múi giờ" với SQL sau:

UPDATE table SET column = now(); 

Cảm ơn!

+1

Nó có gây hại gì không? Cơ sở dữ liệu chỉ đơn giản là bỏ qua mili giây nếu loại cột không hỗ trợ chúng. – Crozin

+0

Điều đó là tốt để biết, cảm ơn bạn. Tôi không chắc nó có ảnh hưởng gì không. – littleK

Trả lời

9
UPDATE tbl SET col = DATE_TRUNC('second', NOW()); 

Xem tài liệu cho DATE_TRUNC.

+0

Cảm ơn bạn, pilcrow. Tôi đã chải qua tài liệu và tôi không thể tìm thấy nó ở bất cứ đâu. Tôi đoán tôi đang nhìn nhầm chỗ. – littleK

+0

@littleK Trong mã mới, nó có thể đáng sử dụng các hàm thời gian chuẩn của SQL 'current_timestamp' etc thay vì' NOW() 'hoặc (tệ hơn)' 'now' :: timestamp'. Xem http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT –

14

Câu trả lời đơn giản là truyền đến độ chính xác bằng 0.

select now()::timestamptz(0); 
+0

+1 một giải pháp thay thế tuyệt vời – pilcrow

+0

+ phương pháp này giữ múi giờ – MingalevME

0

Tùy thuộc vào yêu cầu của bạn, tùy chọn khác là để điều chỉnh độ chính xác của các cột timestamp bản thân - thiết độ chính xác của nó là 0. Điều này có thể hữu ích khi sử dụng PostgreSQL với các chương trình di sản mà không xử lý giây phân đoạn trong timestamps .

2

Bạn có thể thay đổi cấu trúc của il bảng của bạn, bạn di chuyển theo chiều dài của cột 0 trong pgAdmin 3 hoặc nếu bạn tạo một bảng bằng cách sử dụng timestamp (0) như thế:

CREATE TABLE public.users 
(
    id integer serial, 
    username character varying(255) NOT NULL, 
    email character varying(255) NOT NULL, 
    password character varying(255) NOT NULL, 
    created_at timestamp(0) without time zone NOT NULL, 
    updated_at timestamp(0) without time zone NOT NULL, 

    CONSTRAINT users_pkey PRIMARY KEY (id) 
); 

Nhưng nếu bạn làm điều đó một lỗi sẽ xảy ra nếu bạn cố gắng chèn một dấu thời gian với mili giây.

Các vấn đề liên quan