2011-10-20 75 views
8

Có thể lưu tháng/năm trong SQL Server 2008 với một giờ thông thường không? Tôi không cần tem thời gian và cột sẽ lưu trữ các kết hợp mo/yr duy nhất (ví dụ: 10-11, 11-11, 12-11, v.v.).Lưu trữ chỉ tháng và năm trong SQL Server 2008?

Bất kỳ đề xuất nào?

Trả lời

14

Nếu không biết mục đích sử dụng, không thể tư vấn chính xác. Tuy nhiên, việc lưu trữ tháng và năm có thể dễ dàng thực hiện theo ít nhất ba cách:

  • sử dụng trường ngày, nhưng luôn luôn lưu vào trường ngày đầu tiên của tháng vào lúc nửa đêm; sau đó luôn luôn tùy chỉnh định dạng trường ngày để trưng bày
  • lĩnh vực năm và tháng
  • add số nguyên, và định vị chúng bằng cách tách một ngày
  • thêm một trường số nguyên nơi bạn mã hóa nó như năm * 100 + tháng hoặc một số chương trình hữu ích khác
+1

Lưu ý rằng wallyk đề cập đến [Kiểu dữ liệu ngày] (http://msdn.microsoft.com/en-us/library/bb630352% 28v = SQL.100% 29.aspx) trong tùy chọn đầu tiên của mình. Điều này khác với trường Ngày giờ. Cả ba tùy chọn này đều có ý nghĩa rất lớn. –

2

Sql Server sẽ lưu trữ toàn bộ dữ liệu datetime (giờ hàng tháng: min: sec.milliSec) bất kể là gì.

Khi bạn lưu trữ ngày, bạn có thể thực hiện ngày 1 của tháng. Chỉ cần định dạng ngày bạn muốn khi bạn thực hiện truy vấn của mình.

http://www.sql-server-helper.com/tips/date-formats.aspx

1

Bạn không thể lưu trữ năm và tháng trong cột DateTime. Vâng, những gì bạn có thể làm là mặc định phần còn lại của các giá trị. tức là: 2011.10.1.1, 2011.11.1.1 như thế.

Hoặc bạn có thể lưu trữ dưới dạng chuỗi.

1

Từ SQLServer 2008 và trở đi:

Save as một cột Date và thêm ràng buộc kiểm tra sau đây để đảm bảo giá trị luôn luôn là người đầu tiên của tháng:

datepart (tháng, MyDate) <> datepart (tháng, dateadd (ngày, -1, MyDate))

+2

Tôi thích cách tiếp cận này, nhưng tôi nghĩ ràng buộc kiểm tra đơn giản hơn là 'DAY (MyDate) = 1'. – Sam

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