从SQL DATE获取月份和年份

时间:2009-11-23 09:15:32

标签: sql sql-server tsql

我只需要在SQL Server中的Date字段中访问Month.Year。

26 个答案:

答案 0 :(得分:148)

除了已经提出的建议外,我还可以从你的问题中推断出另一个可能性:
- 你仍然希望结果是日期
- 但你想'丢弃'天,小时等等 - 仅保留一年/月的日期字段

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

答案 1 :(得分:114)

select month(dateField), year(dateField)

答案 2 :(得分:31)

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

答案 3 :(得分:29)

SELECT convert(varchar(7), getdate(), 126) 

您可能想看看这个网站: http://anubhavg.wordpress.com/2009/06/11/how-to-format-datetime-date-in-sql-server-2005/

答案 4 :(得分:15)

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

输出结果如下:&#39; 2013年12月&#39;

答案 5 :(得分:14)

有两个SQL函数可以做到:

有关详细信息,请参阅链接文档。

答案 6 :(得分:11)

这也很有帮助。

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

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

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

答案 7 :(得分:11)

让我们这样写:YEAR(anySqlDate)MONTH(anySqlDate)。例如,尝试使用YEAR(GETDATE())

答案 8 :(得分:9)

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

答案 9 :(得分:6)

我以两种方式解释你的问题。

a)你只需要Month&amp;这一年分别是答案

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,'')

答案 10 :(得分:3)

RIGHT(CONVERT(VARCHAR(10), reg_dte, 105), 7) 

答案 11 :(得分:3)

CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 
如果你想要一个六位数的结果,

给你201601

答案 12 :(得分:3)

某些数据库(例如MS ACCESSRODBC)可能不支持SQL SERVER函数,但对于具有FORMAT函数的任何数据库,您只需执行以下操作:

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

答案 13 :(得分:2)

试试这个

select to_char(DATEFIELD,'MON') from YOUR_TABLE

例如

select to_char(sysdate, 'MON') from dual

答案 14 :(得分:2)

选择CONCAT(MONTH(GETDATE()),'。',YEAR(GETDATE()))

输出: 2020年5月

选择CONCAT(DATENAME(MONTH,GETDATE()),'。',YEAR(GETDATE()))

输出: 2020年5月

答案 15 :(得分:1)

出于报告目的,我倾向于使用

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

您将丢失日期类型,因为它将返回 (n)varchar。但是使用前导零,该列是可排序的(例如“202112”>“202102”)。您还可以在年和月之间添加一个分隔符,如

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

返回诸如“2020-08”之类的想法(仍可排序)。

答案 16 :(得分:1)

另一个简单的答案是从日期中删除天数

这里是如何在 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

答案 17 :(得分:0)

从日期获取月份和年份

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

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

答案 18 :(得分:0)

查询:-- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{ return UIEdgeInsetsMake(top, left, bottom, right); }

输出:-2019年1月

我们可以使用的通用日期字段

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

答案 19 :(得分:0)

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

输出:2019年3月

答案 20 :(得分:0)

尝试一下:

葡萄牙语

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 ”或“ zh-CN ”更改为link

中的任何一种

答案 21 :(得分:0)

我有一个特殊的要求,即执行类似的操作以显示月份年份,可以通过以下方式完成:

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'

答案 22 :(得分:0)

尝试SELECT CONCAT(month(datefield), '.', year(datefield)) FROM YOURTABLE;

答案 23 :(得分:0)

对于结果:“ YYYY-MM”

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

答案 24 :(得分:0)

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

将我想要的日期结果格式化为2018年3月7日

我的专栏&#39; transfer_date&#39;是一个日期时间类型列,我在Azure上使用SQL Server 2017

答案 25 :(得分:0)

我的数据库不支持上述大多数功能,但我发现这有效:

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

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

以&#34; yyyy-mm&#34;

的格式返回年份和月份