从SQL DATE获取月份和年份

use*_*820 116 sql t-sql sql-server

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

Mat*_*lie 160

除了已经提出的建议之外,我还可以从你的问题中推断出另一个
可能性:- 你仍然希望结果是一个约会
- 但你想要"丢弃"天,小时等
- 离开一年/月只有日期字段

SELECT
   DATEADD(MONTH, DATEDIFF(MONTH, 0, <dateField>), 0) AS [year_month_date_field]
FROM
   <your_table>
Run Code Online (Sandbox Code Playgroud)

这将从基准日期(0)获取整月的数量,然后将它们添加到该基准日期.因此舍入到日期所在的月份.

注意:在SQL Server 2008中,您仍然将TIME附加为00:00:00.000这与"删除"任何日期和时间的符号并不完全相同.DAY也设置为第一个.例如2009-10-01 00:00:00.000

  • 这对我来说根本不起作用。结果给了我 2023-02-01 00:00:00.000。 (3认同)
  • @dss - 使用什么参数?显示实际的 SQL,我很乐意看看。 (2认同)
  • @DSS - 是的,这似乎是正确的。它向下舍入到 2014 年 9 月开始。没有“仅年和月”数据类型,因此使用每个月的第一个时刻是标准做法。将此 DATETIME 值转换为字符串(应用层、表示层、报告层等)时,您始终可以选择仅使用年份和月份部分对其进行格式化。但就“数据库内”数据操作而言,这是正确的。 (2认同)

Luc*_*ala 125

select month(dateField), year(dateField)
Run Code Online (Sandbox Code Playgroud)

  • 伟大的!您可以将它们连接到一列:'select cast(month(dateField) as varchar) + '.' + cast(year(dateField) as varchar)' (7认同)

Ren*_*007 33

SELECT convert(varchar(7), getdate(), 126) 
Run Code Online (Sandbox Code Playgroud)

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

  • @RuelosJoel varchar(6) 会将“2021-03”截断为“2021-0” (2认同)

Adr*_*der 32

SELECT DATEPART(yy, DateVal)
SELECT DATEPART(MM, DateVal)
SELECT DATENAME(MM, DateVal)
Run Code Online (Sandbox Code Playgroud)

  • SELECT DATEPART(MM,DateVal)没有返回'MM'.如果月份在1-9之间,它只返回一位数. (2认同)
  • 而不是“MM”,它应该说“月”:'SELECT DATEPART(month, getdate())' (2认同)

Val*_*ych 16

datename(m,column)+' '+cast(datepart(yyyy,column) as varchar) as MonthYear
Run Code Online (Sandbox Code Playgroud)

输出结果如下:'2013年12月'


Grz*_*lik 14

有两个SQL函数可以做到:

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

  • 我建议至少提一些简短的例子,因为链接并不总是永远存在......实际上它们已经不再好了. (3认同)

Phi*_*ier 11

让我们这样写:YEAR(anySqlDate)MONTH(anySqlDate).YEAR(GETDATE())例如尝试一下.


NoN*_*aMe 11

这也很有帮助.

SELECT YEAR(0), MONTH(0), DAY(0);
Run Code Online (Sandbox Code Playgroud)

要么

SELECT YEAR(getdate()), MONTH(getdate()), DAY(getdate());
Run Code Online (Sandbox Code Playgroud)

要么

SELECT YEAR(yourDateField), MONTH(yourDateField), DAY(yourDateField);
Run Code Online (Sandbox Code Playgroud)


小智 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
Run Code Online (Sandbox Code Playgroud)


Ibo*_*Ibo 8

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

SELECT FORMAT(<your-date-field>,"YYYY-MM") AS year-date FROM <your-table>
Run Code Online (Sandbox Code Playgroud)

  • 确切地说,最好、最简单的解决方案:选择 FORMAT(getdate(), 'MMyyyy') (3认同)

Din*_*aud 7

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

select CONCAT(DATENAME(MONTH , GETDATE()),'.',YEAR(GETDATE()))
Output: **May.2020**
Run Code Online (Sandbox Code Playgroud)


pri*_*kar 6

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

a)您只需要分别使用月份和年份,在这种情况下,这就是答案

select 
        [YEAR] = YEAR(getdate())
        ,[YEAR] = DATEPART(YY,getdate())
        , [MONTH] = month(getdate())
        ,[MONTH] = DATEPART(mm,getdate())
        ,[MONTH NAME] = DATENAME(mm, getdate()) 
Run Code Online (Sandbox Code Playgroud)

b)

您希望以给定日期显示,'2009-11-24 09:01:55.483'MONTH.YEAR格式显示.所以输出应该像11.2009这种情况一样.

如果应该是这种情况那么试试这个(除其他选择之外)

select [Month.Year] = STUFF(CONVERT(varchar(10), GETDATE(),104),1,3,'')
Run Code Online (Sandbox Code Playgroud)


Val*_*ych 5

RIGHT(CONVERT(VARCHAR(10), reg_dte, 105), 7) 
Run Code Online (Sandbox Code Playgroud)


Mik*_*ike 5

CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 
Run Code Online (Sandbox Code Playgroud)

如果您想要六位数的结果,则为您提供例如 201601


shi*_*or7 5

对于 MySQL,这非常有效:

DATE_FORMAT(<your-date>, '%Y-%m %M')
Run Code Online (Sandbox Code Playgroud)

它进入了SELECT声明。这是输出:

2014-03 March
Run Code Online (Sandbox Code Playgroud)

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

  • 问题是关于 MS SQL 的,此代码适用于 MySQL。至少你应该写一个关于它的信息。 (2认同)
  • date_format(date, 'yyyy-MM-01') 因为月份对我有用谢谢 (2认同)