Làm tiêu đề, làm cách nào để đặt cột của bảng có giá trị mặc định là năm và tháng hiện tại, ở định dạng 'YYYYMM', như 200905 cho ngày hôm nay?Cách đặt datestamp giá trị mặc định Postgresql như 'YYYYMM'?
Trả lời
Xin lưu ý rằng định dạng của ngày không phụ thuộc vào bộ nhớ. Nếu điều quan trọng đối với bạn là ngày đó là được lưu trữ ở định dạng đó, bạn sẽ cần xác định loại dữ liệu tùy chỉnh hoặc lưu trữ dưới dạng chuỗi. Sau đó, bạn có thể sử dụng kết hợp của extract, định kiểu và ghép nối để nhận định dạng đó.
Tuy nhiên, tôi nghi ngờ rằng bạn muốn lưu trữ ngày và nhận định dạng trên đầu ra. Vì vậy, một cái gì đó như thế này sẽ làm các trick cho bạn:
CREATE TABLE my_table
(
id serial PRIMARY KEY not null,
my_date date not null default CURRENT_DATE
);
(CURRENT_DATE is basically a synonym for now() and a cast to date).
(Đã chỉnh sửa sử dụng to_char).
Sau đó, bạn có thể nhận được kết quả của bạn như:
SELECT id, to_char(my_date, 'yyyymm') FROM my_table;
Bây giờ, nếu bạn đã thực sự cần phải lưu trữ lĩnh vực đó như là một chuỗi và đảm bảo các định dạng mà bạn có thể luôn luôn làm:
CREATE TABLE my_other_table
(
id serial PRIMARY KEY not null,
my_date varchar(6) default to_char(CURRENT_DATE, 'yyyymm')
);
Tại sao bạn muốn thực hiện việc này?
IMHO bạn nên lưu trữ ngày làm loại mặc định và nếu cần tìm nạp ngày đó thành định dạng mong muốn.
Bạn có thể thoát khỏi việc chỉ định định dạng của cột nhưng với chế độ xem. Tôi không biết các phương pháp khác.
được sửa đổi:
Nghiêm túc, ý kiến của tôi, bạn nên tạo một cái nhìn vào đó một bảng với kiểu ngày. Tôi đang nói về một cái gì đó như thế này:
create table sample_table (id serial primary key, timestamp date);
và hơn
create view v_example_table as select id, to_char(date, 'yyyymmmm');
Và sử dụng v_example_table trong ứng dụng của bạn.
Phải. Tốt hơn để sử dụng một chức năng:
CREATE OR REPLACE FUNCTION yyyymm() RETURNS text
LANGUAGE 'plpgsql' AS $$
DECLARE
retval text;
m integer;
BEGIN
retval := EXTRACT(year from current_timestamp);
m := EXTRACT(month from current_timestamp);
IF m < 10 THEN retval := retval || '0'; END IF;
RETURN retval || m;
END $$;
SELECT yyyymm();
DROP TABLE foo;
CREATE TABLE foo (
key int PRIMARY KEY,
colname text DEFAULT yyyymm()
);
INSERT INTO foo (key) VALUES (0);
SELECT * FROM FOO;
này mang lại cho tôi
key | colname
-----+---------
0 | 200905
Hãy chắc chắn rằng bạn chạy createlang plpgsql
từ dòng lệnh Unix, nếu cần thiết.
hoặc làm "tạo ngôn ngữ plpgsql" từ bên trong psql, tất cả đều là createlang. – araqnid
Cám ơn tất cả những người trả lời, và cảm ơn những người đã cho tôi ý tưởng chức năng định dạng , tôi sẽ thực sự nghiên cứu nó để sử dụng trong tương lai.Tuy nhiên, đối với trường hợp rõ ràng này, 'trường yyyymm đặc biệt' không được coi là trường ngày tháng, nhưng cũng giống như một thẻ, o bất kỳ thứ gì sẽ được sử dụng để khớp chính xác giá trị được nghiên cứu cả năm; có đã là một lĩnh vực ngày, với đầy đủ các dấu thời gian, nhưng nếu tôi cần tất cả các hàng của tháng 1 năm 2008, tôi nghĩ rằng đó là nhanh hơn một lựa chọn như
SELECT [columns] FROM table WHERE yearmonth = '200801'
thay vì
SELECT [columns] FROM table WHERE date BETWEEN DATE('2008-01-01') AND DATE('2008-01-31')
Đó là một chung quan niệm sai lầm rằng bạn có thể denormalise như thế này cho hiệu suất. Sử dụng date_trunc('month', date)
cho các truy vấn của bạn và thêm một biểu thức chỉ mục cho điều này nếu bạn thấy nó chạy chậm.
- 1. PostgreSQL - đặt một giá trị cell mặc định theo một giá trị của ô
- 2. cách đặt giá trị mặc định HTML.EditorFor()
- 3. Đặt giá trị mặc định trong Mockito
- 4. Đặt giá trị mặc định bằng sqlalchemy
- 5. Đặt giá trị mặc định trong DataContract?
- 6. cách đặt giá trị đối số phương thức mặc định?
- 7. Cách đặt giá trị mặc định trong Hibernate
- 8. PostgreSQL - giá trị động như tên bảng
- 9. Cách đặt giá trị mặc định trong bảng định dạng TabularInline trong quản trị Django
- 10. Đặt lại giá trị mặc định của Sở thích
- 11. Đặt giá trị đối số mặc định trong Racket
- 12. Làm cách nào để thay đổi giá trị mặc định của cột trong PostgreSQL?
- 13. giá trị chung Mặc định
- 14. DropdownListFor giá trị mặc định
- 15. Đặt git diff thành giá trị mặc định
- 16. Đặt giá trị mặc định cho thuộc tính khóa ngoài
- 17. Django đặt giá trị biểu mẫu mặc định
- 18. Đặt giá trị số nguyên mặc định trong activerecord
- 19. chọn nhiều, đặt giá trị mặc định đã chọn
- 20. Đặt giá trị mặc định cho Hộp tổ hợp ttk
- 21. Đặt giá trị mặc định trong datetime thiết kế EF
- 22. Đặt giá trị mặc định cho thuộc tính
- 23. RingtonePreference Giá trị mặc định
- 24. DependencyProperty Giá trị mặc định
- 25. Preference giá trị nhạc chuông mặc định
- 26. Cách đặt giá trị mặc định của trường đặt hàng +1 của giá trị cao nhất trong Django
- 27. Knockout.js đặt lại giá trị của một lựa chọn về giá trị mặc định của nó
- 28. ComboBox FXML giá trị mặc định
- 29. giá trị đối tượng mặc định trong chức năng với đối số mặc định giá trị
- 30. Giá trị mặc định GOMAXPROCS là gì
Tôi cần nó. Tôi có một ứng dụng php chạy và truy vấn db với những giá trị đó, 'yyyymm' là '200801', '200802', v.v. để lấy dữ liệu - và tôi thougt rằng có giá trị mặc định sẽ tốt hơn sau đó là SELECT fiels FROM table WHERE column GIỮA timestamp1 AND timestamp2 – Strae
Tôi sẽ làm điều này với giải pháp mà tôi đã thêm vào thư trả lời của tôi. –