2008-09-05 71 views
72

Tôi cần tháng + năm từ ngày giờ trong SQL Server như 'Jan 2008'. Tôi đang nhóm truy vấn theo tháng, năm. Tôi đã tìm kiếm và tìm thấy các chức năng như datepart, chuyển đổi, vv, nhưng không ai trong số họ có vẻ hữu ích cho việc này. Am i thiếu cái gì ở đây? Có chức năng cho việc này không?Nhận tháng và năm từ một ngày giờ trong SQL Server 2005

+0

@Evan Carroll - điều này có cấu thành việc chiếm đoạt câu hỏi không? Nếu bạn có một câu trả lời cao hơn cho câu hỏi, nó không nên được cung cấp như một câu trả lời cho câu hỏi thay vì chỉ mọi người đến một câu hỏi khác? – STLDeveloper

+0

@STLDhiển thị cách thức tấn công. Câu hỏi đặt ra cho năm 2005? Tôi đã không đặt nó ở đó. Tôi không tìm kiếm năm 2005. Thật không may, câu trả lời hay nhất ở đây không hoạt động vào năm 2005, rõ ràng là năm 2012. Tôi có nên downvote câu trả lời năm 2005 để được cổ xưa? –

+0

@STLDrên thực tế, tôi không quan tâm ở đây. =) lập trường chính thức của tôi luôn hướng dẫn mọi người sử dụng PostgreSQL, không chắc tại sao tôi lại cố gắng giúp đỡ. –

Trả lời

68

Nếu bạn muốn bạn trở lại làm chuỗi, ở định dạng đó;

SELECT 
    CONVERT(CHAR(4), date_of_birth, 100) + CONVERT(CHAR(4), date_of_birth, 120) 
FROM customers 

Here are the other format options

+0

Tôi đã thử sử dụng CONVERT (CHAR (4), GetDate(), 100) trên SQL Server của mình và thay vào đó tôi nhận được "09 1". Tôi nhận được không gian và một "1" cho 17. sử dụng "chọn CONVERT (varchar, GetDate(), 100)" lợi nhuận "09 17 2009 4:59 PM" – Nap

+1

Thật kỳ lạ - từ tài liệu tôi liên kết đến, 100 nên trả lại một chữ viết tắt tháng ba chữ cái và một dấu cách, nếu được nhập vào một CHAR (4). Nhưng sau đó, kết quả bạn đã đăng cho một CONVERT (varchar, getdate(), 100) trông khác với những gì tôi mong đợi để xem. Bạn đang sử dụng phiên bản SQLServer nào? Bạn đang sử dụng cài đặt bản địa hóa/quốc tế hóa nào (điều này không quan trọng đối với định dạng 100). – robsoft

4

Định dạng đó không tồn tại. Bạn cần phải kết hợp hai điều,

select convert(varchar(4),getdate(),100) + convert(varchar(4),year(getdate())) 
163
select 
datepart(month,getdate()) -- integer (1,2,3...) 
,datepart(year,getdate()) -- integer 
,datename(month,getdate()) -- string ('September',...) 
+0

Vì vậy, tôi nghĩ rằng đây là những gì tôi muốn, nhưng tôi không thấy làm thế nào TSQL sẽ hiểu sự khác biệt giữa 'datepart (tháng, getdate())' và 'datepart (năm, getdate())'. ** tháng ** và ** năm ** là gì? – jp2code

+4

@ jp2code ** tháng ** và ** năm ** về cơ bản là các hằng số được định nghĩa tại đây: http://msdn.microsoft.com/en-us/library/ms174420.aspx. TSQL hiểu chúng giống như cách bạn làm, bằng cách đọc chúng :) –

+1

LOL - Cảm ơn Zach. Tôi đóng vai chính ở đó một thời gian dài trước khi tìm ra trên một trang web khác. – jp2code

5
(Month(Created) + ',' + Year(Created)) AS Date 
11

Funny, tôi chỉ chơi xung quanh văn bản truy vấn này cùng ra trong SQL Server và sau đó LINQ.

SELECT 
    DATENAME(mm, article.Created) AS Month, 
    DATENAME(yyyy, article.Created) AS Year, 
    COUNT(*) AS Total 
FROM Articles AS article 
GROUP BY 
    DATENAME(mm, article.Created), 
    DATENAME(yyyy, article.Created) 
ORDER BY Month, Year DESC 

Nó tạo ra lượng ouput sau (ví dụ).

Month | Year | Total 

January | 2009 | 2 
1

tôi đã cùng một vấn đề và sau khi nhìn xung quanh Tôi thấy điều này:

SELECT DATENAME(yyyy, date) AS year 
FROM Income 
GROUP BY DATENAME(yyyy, date) 

Nó làm việc tuyệt vời!

5

Làm thế nào về điều này?

Select DateName(Month, getDate()) + ' ' + DateName(Year, getDate()) 
0

Có, bạn có thể sử dụng datename(month,intime) để nhận tháng bằng văn bản.

11

Sử dụng:

select datepart(mm,getdate()) --to get month value 
select datename(mm,getdate()) --to get name of month 
-3

Các công trình sau đây một cách hoàn hảo! Tôi chỉ sử dụng nó, hãy thử nó.

date_format(date,'%Y-%c') 
+2

đây không phải là chức năng máy chủ sql hợp lệ hoặc tuyên bố –

1

Chuyển đổi ngày sang tháng đầu tiên cho phép bạn nhóm theo thứ tự theo một thuộc tính duy nhất và trải nghiệm của tôi nhanh hơn.

declare @mytable table(mydate datetime) 
declare @date datetime 
set @date = '19000101' 
while @date < getdate() begin 
    insert into @mytable values(@date) 
    set @date = dateadd(day,1,@date) 
end 

select count(*) total_records from @mytable 

select dateadd(month,datediff(month,0,mydate),0) first_of_the_month, count(*) cnt 
from @mytable 
group by dateadd(month,datediff(month,0,mydate),0) 
1
---Lalmuni Demos--- 
create table Users 
(
userid int,date_of_birth date 
) 
---insert values--- 
insert into Users values(4,'9/10/1991') 

select DATEDIFF(year,date_of_birth, getdate()) - (CASE WHEN (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()),date_of_birth)) > getdate() THEN 1 ELSE 0 END) as Years, 
MONTH(getdate() - (DATEADD(year, DATEDIFF(year, date_of_birth, getdate()), date_of_birth))) - 1 as Months, 
DAY(getdate() - (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()), date_of_birth))) - 1 as Days, 
from users 
1
cast(cast(sq.QuotaDate as date) as varchar(7)) 

cho "2006-04" định dạng

3

cách tốt nhất để làm điều đó là với:

dateadd(month,datediff(month,0,*your_date*),0) 

nó sẽ giữ kiểu datetime bạn

+0

Đây là câu trả lời hay nhất cho việc buộc bất kỳ ngày nào chỉ là tháng và năm, bỏ qua các thành phần ngày và giờ. Tốt hơn nhiều so với câu trả lời được chấp nhận vì thông tin có thể được sắp xếp chính xác và hoạt động chính xác như một ngày trong các công cụ báo cáo hạ lưu. –

26

Bắt đầu với SQL Server 2012, bạn có thể sử dụng:

SELECT FORMAT(@date, 'yyyyMM') 
+0

Vâng chơi sir ... này trả lời câu hỏi của tôi trong năm 2012 –

+0

Tôi vui vì tôi đã cuộn này đến nay, điều này gọn gàng và đơn giản. Cảm ơn! – Niklas

+0

Đây là một đóng góp có giá trị nhưng nó phải được trả lời ở nơi khác, http://stackoverflow.com/a/43196370/124486 –

0

Câu hỏi đặt ra là về SQL Server 2005, nhiều câu trả lời ở đây dành cho phiên bản SQL Server sau.

select convert (varchar(7), getdate(),20) 
--Typical output 2015-04 

SQL Server 2005 không có ngày chức năng which was introduced in SQL Server 2008

0
,datename(month,(od.SHIP_DATE)) as MONTH_ 

Trả lời: MONTH_ tháng một tháng một Tháng Chín Tháng Mười Tháng Mười Hai Tháng Mười Tháng Chín

5

Trong SQL Server 2012, dưới đây có thể được sử dụng

chọn FORMAT (getdate(), 'MMM yyyy')

này mang lại cho chính xác "Tháng 6 năm 2016"

0

lợi nhuận tên đầy đủ tháng, -, đầy đủ năm ví dụ March-2017

CONCAT(DATENAME(mm, GetDate()), '-', DATEPART(yy, GetDate())) 
+2

Đã có 18 câu trả lời khác cho câu hỏi này. Câu trả lời của bạn có thêm thông tin mới nào? – stannius

0

Nó hoạt động rất tốt.

DECLARE @pYear VARCHAR(4) 

DECLARE @pMonth VARCHAR(2) 

DECLARE @pDay VARCHAR(2) 

SET @pYear = RIGHT(CONVERT(CHAR(10), GETDATE(), 101), 4) 

SET @pMonth = LEFT(CONVERT(CHAR(10), GETDATE(), 101), 2) 

SET @pDay = SUBSTRING(CONVERT(CHAR(10), GETDATE(), 101), 4,2) 

SELECT @pYear,@pMonth,@pDay 
Các vấn đề liên quan