Chỉ nhận tháng và năm từ NGÀY SQL


Câu trả lời:


170

Cũng như các đề xuất đã có, có một khả năng khác mà tôi có thể suy ra từ câu hỏi của bạn:
- Bạn vẫn muốn kết quả là một ngày
- Nhưng bạn muốn 'loại bỏ' Ngày, Giờ, v.v.
- Rời đi một năm / tháng trường ngày duy nhất

SELECT
   DATEADD(MONTH, DATEDIFF(MONTH, 0, <dateField>), 0) AS [year_month_date_field]
FROM
   <your_table>

Điều này nhận được số lượng của cả tháng kể từ ngày cơ sở (0) và sau đó thêm chúng vào ngày cơ sở đó. Do đó làm tròn xuống đến tháng có ngày.

LƯU Ý: Trong SQL Server 2008, Bạn vẫn sẽ có THỜI GIAN được đính kèm là 00: 00: 00.000 Điều này không hoàn toàn giống như "xóa" mọi ký hiệu về ngày và thời gian hoàn toàn. Ngoài ra NGÀY được đặt thành đầu tiên. ví dụ: 2009-10-01 00: 00: 00.000


1
Điều này đã không làm việc cho tôi. Nó mang lại cho tôi 2023-02-01 00: 00: 00.000.
Dss

1
@dss - với thông số gì? Hiển thị SQL thực tế và tôi rất vui khi có một cái nhìn.
MatBailie

@MatBailie CHỌN DATEADD (MONTH, DATEDIFF (MONTH, 0, LastSaleDate), 0) NHƯ [năm_month_date_field] 2014-09-01 00: 00: 00.000
Dss

1
@DSS - Có, điều đó có vẻ đúng. Nó được làm tròn đến đầu tháng 9 năm 2014. Không có loại dữ liệu "Chỉ năm và tháng", vì vậy sử dụng thời điểm đầu tiên của mỗi tháng là cách thực hành chuẩn. Khi chuyển đổi giá trị DATETIME này thành một chuỗi (Lớp Aaplication, Lớp trình bày, Lớp báo cáo, v.v.), bạn luôn có thể chọn định dạng nó chỉ với các phần năm và tháng. Nhưng về mặt thao tác dữ liệu "trong cơ sở dữ liệu" thì điều này là chính xác.
MatBailie

Tôi nghĩ có lẽ vì câu trả lời của bạn có nghĩa là được sử dụng với trường "Ngày" nhưng tôi đang sử dụng trường "datetime" nên có lẽ đó là vấn đề.
Dss

133
select month(dateField), year(dateField)

2
tuyệt quá! Bạn có thể kết nối chúng với một cột: 'chọn cast (tháng (dateField) dưới dạng varchar) +'. ' + diễn viên (năm (dateField) dưới dạng varchar) '
izik f


32
SELECT DATEPART(yy, DateVal)
SELECT DATEPART(MM, DateVal)
SELECT DATENAME(MM, DateVal)

2
CHỌN DATEPART (MM, DateVal) sẽ không trả về 'MM'. Nó chỉ trả về một chữ số nếu tháng nằm trong khoảng từ 1-9.
Jaikrat

Thay vì "MM", bạn nên nói "tháng": 'CHỌN DATEPART (tháng, getdate ())'
Renne007

17
datename(m,column)+' '+cast(datepart(yyyy,column) as varchar) as MonthYear

đầu ra sẽ như sau: 'Tháng 12 năm 2013'


15

Có hai hàm SQL để làm điều đó:

Tham khảo các tài liệu liên kết để biết chi tiết.


5
Tôi khuyên bạn nên đưa ra ít nhất một số ví dụ ngắn gọn vì các liên kết không luôn tồn tại mãi mãi ... Thực tế chúng không còn tốt nữa.
Carol

12

Điều này cũng có thể hữu ích.

SELECT YEAR(0), MONTH(0), DAY(0);

hoặc là

SELECT YEAR(getdate()), MONTH(getdate()), DAY(getdate());

hoặc là

SELECT YEAR(yourDateField), MONTH(yourDateField), DAY(yourDateField);

Dù sao để không loại bỏ "0" trong trường trả về?
Si8

11

hãy viết theo cách này: YEAR(anySqlDate)MONTH(anySqlDate). Hãy thử nó với YEAR(GETDATE())ví dụ.


10
convert(varchar(7), <date_field>, 120)
because 120 results in 'yyyy-MM-dd' which is varchar(10)
using varchar(7) will display only year and month

example:
select convert(varchar(7), <date_field>, 120), COUNT(*)
from <some_table>
group by convert(varchar(7), <date_field>, 120)
order by 1

6

Tôi đang giải thích câu hỏi của bạn theo hai cách.

a) Bạn chỉ cần tháng và năm một cách riêng biệt trong trường hợp nào đây là câu trả lời

select 
        [YEAR] = YEAR(getdate())
        ,[YEAR] = DATEPART(YY,getdate())
        , [MONTH] = month(getdate())
        ,[MONTH] = DATEPART(mm,getdate())
        ,[MONTH NAME] = DATENAME(mm, getdate()) 

b)

Bạn muốn hiển thị từ một ngày nhất định, hãy nói '2009-11-24 09:01:55.483'ở định dạng MONTH.YEAR . Vì vậy, đầu ra nên đến như 11.2009trong trường hợp này.

Nếu đó là trường hợp thì hãy thử điều này (trong số các lựa chọn thay thế khác)

select [Month.Year] = STUFF(CONVERT(varchar(10), GETDATE(),104),1,3,'')

5

Một số cơ sở dữ liệu như MS ACCESShoặc RODBCcó thể không hỗ trợ các SQL SERVERchức năng, nhưng đối với bất kỳ cơ sở dữ liệu nào có FORMATchức năng, bạn chỉ cần thực hiện việc này:

SELECT FORMAT(<your-date-field>,"YYYY-MM") AS year-date FROM <your-table>


3
CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 

cung cấp cho bạn ví dụ 201601 nếu bạn muốn có kết quả sáu chữ số


2

Thử cái này

select to_char(DATEFIELD,'MON') from YOUR_TABLE

ví dụ.

select to_char(sysdate, 'MON') from dual

2

Thử cái này:

Bồ Đào Nha

SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'pt-pt') + ' ' + convert(varchar(10),year(getdate()),100)

Kết quả: maio 2019


Tiếng Anh

SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'en-US') + ' ' + convert(varchar(10),year(getdate()),100)

Kết quả: tháng 5 năm 2019

Nếu bạn muốn bằng ngôn ngữ khác, hãy thay đổi ' pt-pt ' hoặc ' en-US ' thành bất kỳ ngôn ngữ nào trong liên kết này


1

Tôi có một yêu cầu cụ thể để làm một cái gì đó tương tự trong đó nó sẽ hiển thị tháng năm có thể được thực hiện bằng cách sau:

SELECT DATENAME(month, GETDATE()) + '-' + CAST(YEAR(GETDATE()) AS nvarchar) AS 'Month-Year'

Trong trường hợp cụ thể của tôi, tôi cần phải hủy bỏ việc xóa bỏ 3 chữ cái trong một năm với 2 chữ số, trông giống như thế này: SELECT LEFT(DATENAME(month, GETDATE()), 3) + '-' + CAST(RIGHT(YEAR(GETDATE()),2) AS nvarchar(2)) AS 'Month-Year'



0

Cơ sở dữ liệu của tôi không hỗ trợ hầu hết các chức năng trên tuy nhiên tôi thấy rằng điều này hoạt động:

SELECT * FROM table WHERE SUBSTR(datetime_column, starting_position, number_of_strings)=required_year_and_month;

ví dụ: SELECT SUBSTR(created, 1,7) FROM table;

trả về năm và tháng theo định dạng "yyyy-mm"


0

Nhận tháng và năm từ ngày

DECLARE @lcMonth nvarchar(10)
DECLARE @lcYear nvarchar(10)

SET @lcYear=(SELECT  DATEPART(YEAR,@Date))
SET @lcMonth=(SELECT  DATEPART(MONTH,@Date))

0
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-')

Đầu ra: Tháng 3-2019


0

Truy vấn :- Select datename(m,GETDATE())+'-'+cast(datepart(yyyy,GETDATE()) as varchar) as FieldName

Đầu ra: - Tháng 1-2019

trường ngày chung chúng ta có thể sử dụng

datename(m,<DateField>)+' '+cast(datepart(yyyy,<DateField>) as varchar) as FieldName

0

Để biết kết quả: "YYYY-MM"

SELECT cast(YEAR(<DateColumn>) as varchar) + '-' + cast(Month(<DateColumn>) as varchar)

0
select convert(varchar(11), transfer_date, 106) 

đã cho tôi kết quả mong muốn của tôi về ngày được định dạng là 07 tháng 3 năm 2018

Cột 'transfer_date' của tôi là cột loại thời gian và tôi đang sử dụng SQL Server 2017 trên phương vị


0

chọn CONCAT (THÁNG (GETDATE ()), '.', NĂM (GETDATE ()))

Đầu ra: 5.2020

chọn CONCAT (DATENAME (THÁNG, GETDATE ()), '.', NĂM (GETDATE ()))

Đầu ra: May.2020

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.