从SQL DATE仅获取月份和年份


Answers:


170

除了已经给出的建议之外,我还可以从您的问题中推断出另一种
可能性:-您仍然希望结果是日期
-但您想“舍弃”日期,时间等
-离开年/月仅日期字段

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
这对我根本不起作用。结果是2023-02-01 00:00:00.000。
Dss

1
@dss-具有什么参数?显示实际的SQL,我很高兴看看。
MatBailie 2014年

@MatBailie SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,LastSaleDate),0)AS [year_month_date_field] FROM db1.products,其中productID =123。“ LastSaleDate”列声明为“((日期时间,不为null)”),我得到: 2014-09-01 00:00:00.000
Dss

1
@DSS-是的,这似乎是正确的。它向下舍入到2014年9月开始。没有“仅年份和月份”数据类型,因此使用每月的第一时间是标准做法。当将此DATETIME值转换为字符串(应用层,表示层,报告层等)时,您始终可以选择仅使用年份和月份部分对其进行格式化。但是就“在数据库中”数据操作而言,这是正确的。
MatBailie 2014年

我想也许是因为您的答案是要与“日期”字段一起使用的,但是我使用的是“日期时间”字段,所以可能是问题所在。
Dss



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

2
SELECT DATEPART(MM,DateVal)没有返回“ MM”。如果月份在1到9之间,则仅返回一位数字。
Jaikrat 2013年

代替“ MM”,它应该说“ month”:'SELECT DATEPART(month,getdate())'
Renne007



12

这也可能会有所帮助。

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

要么

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

要么

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

反正不删除返回字段中的“ 0”?
Si8


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

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

a)您仅需要单独的月份和年份,在这种情况下,答案就是

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

b)

你想从某一特定日期发言权显示'2009-11-24 09:01:55.483'MONTH.YEAR格式。因此,输出应为11.2009这种情况。

如果应该这样,请尝试此方法(在其他替代方法中)

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

5

某些数据库(例如MS ACCESSRODBC可能不支持该SQL SERVER功能),但是对于具有该FORMAT功能的任何数据库,您都可以简单地执行以下操作:

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


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

如果您想要六位数的结果,则给出例如201601


2

试试这个

select to_char(DATEFIELD,'MON') from YOUR_TABLE

例如。

select to_char(sysdate, 'MON') from dual

2

试试这个:

葡萄牙语

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 ”更改为任何一种


1

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

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'


1

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


0

我的数据库不支持上面的大多数功能,但是我发现这可行:

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”格式返回年份和月份


0

获取日期的月份和年份

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

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


0

查询: 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


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

给我我想要的日期结果格式为07 Mar 2018

我的列'transfer_date'是日期时间类型列,我在Azure上使用SQL Server 2017


0

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

产出:5.2020

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

产出:2020年5月

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.