簡體   English   中英

從 SQL DATE 獲取月份和年份

[英]Getting only Month and Year from SQL DATE

我只需要從 SQL Server 中的 Date 字段訪問 Month.Year。

除了已經給出的建議外,我還可以從您的問題中推斷出另一種可能性:
- 你仍然希望結果是一個日期
- 但你想“丟棄”天數、小時數等
- 只留下年/月的日期字段

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

這將獲取從基准日期 (0) 開始的整月數,然后將它們添加到該基准日期。 因此向下舍入到日期所在的月份。

注意:在 SQL Server 2008 中,您仍會將 TIME 附加為 00:00:00.000 這與完全“刪除”任何日期和時間表示法並不完全相同。 也將 DAY 設置為第一個。 例如 2009-10-01 00:00:00.000

select month(dateField), year(dateField)
SELECT convert(varchar(7), getdate(), 126) 

你可能想看看這個網站: http ://anubhavg.wordpress.com/2009/06/11/how-to-format-datetime-date-in-sql-server-2005/

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

有兩個 SQL 函數可以做到這一點:

有關詳細信息,請參閱鏈接的文檔。

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

輸出將如下所示:“2013 年 12 月”

一些數據庫如MS ACCESSRODBC可能不支持SQL SERVER函數,但對於任何具有FORMAT函數的數據庫,您可以簡單地這樣做:

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

這也很有幫助。

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

或者

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

或者

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

讓我們這樣寫: YEAR(anySqlDate)MONTH(anySqlDate) 例如,用YEAR(GETDATE())試試。

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

我以兩種方式解釋你的問題。

a)您只需要單獨的月份和年份,在這種情況下,這就是答案

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

b)

您想從給定日期以MONTH.YEAR格式顯示'2009-11-24 09:01:55.483' 所以在這種情況下,輸出應該是11.2009

如果應該是這種情況,那么試試這個(在其他替代方案中)

select [Month.Year] = STUFF(CONVERT(varchar(10), GETDATE(),104),1,3,'')
RIGHT(CONVERT(VARCHAR(10), reg_dte, 105), 7) 

嘗試這個

select to_char(DATEFIELD,'MON') from YOUR_TABLE

例如。

select to_char(sysdate, 'MON') from dual
CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 

如果你想要一個六位數的結果,給你例如 201601

嘗試這個:

葡萄牙語

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

結果:maio 2019


英語

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

結果:2019 年 5 月

如果您想使用另一種語言,請將“ pt-pt ”或“ en-US ”更改為鏈接中的任何一個

select CONCAT(MONTH(GETDATE()),'.',YEAR(GETDATE()))
Output: **5.2020**

select CONCAT(DATENAME(MONTH , GETDATE()),'.',YEAR(GETDATE()))
Output: **May.2020**

出於報告目的,我傾向於使用

CONCAT(YEAR([DateColumn]), RIGHT(CONCAT('00', MONTH([DateColumn])), 2))

您將丟失日期類型,因為它將返回 (n)varchar。 但是,在前導零的情況下,該列是可排序的(例如,'202112' > '202102')。 您還可以在年份和月份之間添加分隔符,例如

CONCAT(YEAR([DateColumn]), '-', RIGHT(CONCAT('00', MONTH([DateColumn])), 2))

返回類似“2020-08”的想法(仍可排序)。

對於 MySQL,這很好用:

DATE_FORMAT(<your-date>, '%Y-%m %M')

它進入SELECT語句。 這是輸出:

2014-03 March

有關DATE_FORMAT的更多信息,請查看文檔: https ://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format

我有一個特定的要求來做類似的事情,它會顯示月份年份,這可以通過以下方式完成:

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

在我的特殊情況下,我需要將其縮減為 3 個字母的月份縮寫和 2 位數的年份,看起來像這樣: SELECT LEFT(DATENAME(month, GETDATE()), 3) + '-' + CAST(RIGHT(YEAR(GETDATE()),2) AS nvarchar(2)) AS 'Month-Year'

嘗試SELECT CONCAT(month(datefield), '.', year(datefield)) FROM YOURTABLE;

另一個簡單的答案是從日期中刪除天數

在這里如何在 BigQuery 中執行此操作

SELECT DATE_ADD(<date_field>, INTERVAL 1 - extract(day from <date_field>) DAY) as year_month_date

一個例子:

SELECT DATE_ADD(date '2021-03-25', INTERVAL 1 - extract(day from date '2021-03-25') DAY) as year_month_date

本次回歸2021-03-01

我的數據庫不支持上述大多數功能,但我發現這可行:

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

例如: SELECT SUBSTR(created, 1,7) FROM table;

以“yyyy-mm”格式返回年份和月份

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

得到了我想要的日期結果,格式為 2018 年 3 月 7 日

我的列“transfer_date”是一個日期時間類型列,我在 Azure 上使用 SQL Server 2017

結果:“YYYY-MM”

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

從日期獲取月份和年份

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

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

查詢:- Select datename(m,GETDATE())+'-'+cast(datepart(yyyy,GETDATE()) as varchar) as FieldName

輸出:- 2019 年 1 月

我們可以使用的一般日期字段

datename(m,<DateField>)+' '+cast(datepart(yyyy,<DateField>) as varchar) as FieldName
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-')

輸出:2019 年 3 月

SELECT * FROM demo 
    WHERE attendance_year_month < SUBSTRING(CURRENT_TIMESTAMP,1,11) 
          AND
          attendance_year_month >= DATE_SUB(SUBSTRING(CURRENT_TIMESTAMP,1,11), INTERVAL 6 MONTH)

函數“Format”方便靈活,但有性能問題, 更多細節

如果您對格式不是很認真,可以通過將其轉換為字符串來獲取年份月份,運行時間也可以接受

SELECT substring(<DateColumn> as varchar) ,0, 8 ) as YearMonth

有時您可能需要為此考慮一個計算列。

ALTER TABLE dbo.ClubMetadata ADD JoinYear AS YEAR(JoinDate);
ALTER TABLE dbo.ClubMetadata ADD JoinMonth AS MONTH(JoinDate);

這對於提高可讀性以及如果您希望為數據編制索引很有用,因為確定性計算列可以編制索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM