[英]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)
datename(m,column)+' '+cast(datepart(yyyy,column) as varchar) as MonthYear
輸出將如下所示:“2013 年 12 月”
一些數據庫如MS ACCESS
或RODBC
可能不支持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.