2009-11-23 151 views

回答

120

除了已经给出的建议,还有另外一个方法可行,我可以从你的问题推断:
- 你仍然希望得到的结果是一个日期
- 但你要“取消”天数,小时等
- 留下一个年/月仅日期字段

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 这与“删除”任何表示法不完全相同一天和一天的时间。 也设置为第一天。例如2009-10-01 00:00:00.000

+0

感谢您的回答。我认为你是唯一理解这个问题的人。 – user160820

+19

为了对其他人公平,你没有完全表达清楚。我只是猜测这种形式会更有用。我建议在你的问题中更详细/明确地避免误解。我很高兴它帮助你:) – MatBailie

+0

这对我来说根本不起作用。它给了我2023-02-01 00:00:00.000的结果。 – Dss

97
select month(dateField), year(dateField) 
+0

非常棒!简单 – Dss

29
SELECT DATEPART(yy, DateVal) 
SELECT DATEPART(MM, DateVal) 
SELECT DATENAME(MM, DateVal) 
+2

SELECT DATEPART(MM,DateVal)不返回'MM'。如果月份在1-9之间,它只返回一位数字。 – Jaikrat

+0

而不是“MM”它应该说“月”:'SELECT DATEPART(month,getdate())' – Renne007

10

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

+1

直接向前,尽可能多。谢谢你,兄弟。 – Kadaj

12

有两个SQL函数来做到这一点:

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

+3

我建议至少放一些简短的例子,因为链接并不总是永远保留下来......事实上,它们不再是好的。 – Carol

5

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

a)您只需要一个月seperately &年在这种情况下,这里就是答案

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,'') 
8
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 
13
datename(m,column)+' '+cast(datepart(yyyy,column) as varchar) as MonthYear 

输出将如下所示:'2013年12月'

2
RIGHT(CONVERT(VARCHAR(10), reg_dte, 105), 7) 
+0

你的代码的任何解释? –

1

试试这个

select to_char(DATEFIELD,'MON') from YOUR_TABLE 

如。

select to_char(sysdate, 'MON') from dual 
10

这也会有所帮助。

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

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

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

无论如何不去除返回字段中的“0”? – Si8

1

CONCAT(DATEPART(YY,日期),格式(DATE, 'MM'))

给你,例如201601如果你想要一个六位数的结果

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”