2013-08-05 35 views
26

Tôi đang cố gắng nhận loại 'ngày' tương ứng với ngày đầu tiên của tháng hiện tại. Về cơ bản, một trong các bảng của tôi lưu trữ ngày, nhưng tôi muốn nó luôn là ngày đầu tiên của tháng, vì vậy tôi đang cố gắng tạo trình kích hoạt sẽ nhận ngay bây giờ() và sau đó thay thế ngày bằng 1.Nhận ngày đầu tiên của tháng ở bưu điện

Trả lời

57

Bạn có thể sử dụng biểu thức date_trunc('month', current_date). Thể hiện bằng câu lệnh SELECT. . .

select date_trunc('month', current_date) 
2013-08-01 00:00:00-04 

Để xóa thời gian, truyền đến nay.

select cast(date_trunc('month', current_date) as date) 
2013-08-01 

Nếu bạn chắc chắn rằng cột nên luôn cửa hàng chỉ là người đầu tiên của một tháng, bạn cũng nên sử dụng một ràng buộc CHECK.

create table foo (
    first_of_month date not null 
    check (extract (day from first_of_month) = 1) 
); 

insert into foo (first_of_month) values ('2015-01-01'); --Succeeds 
insert into foo (first_of_month) values ('2015-01-02'); --Fails 
 
ERROR: new row for relation "foo" violates check constraint "foo_first_of_month_check" 
DETAIL: Failing row contains (2015-01-02). 
2

CHỌN TO_DATE ('2017/12/12', 'YYYY-MM-01');

2017-12-01

+0

vấn đề với câu trả lời này là gì? – Victorqedu

+1

có lẽ chỉ là bạn đã sử dụng dữ liệu tĩnh thay vì CURRENT_DATE()? –