Programing

SQL Server 2005의 날짜 / 시간에서 월 및 연도 가져 오기

lottogame 2020. 9. 22. 21:00
반응형

SQL Server 2005의 날짜 / 시간에서 월 및 연도 가져 오기


'Jan 2008'과 같은 SQL Server의 datetime에서 월 + 연도가 필요합니다. 월, 연도별로 쿼리를 그룹화하고 있습니다. 나는 datepart, convert 등과 같은 기능을 검색하고 찾았지만 그중 어느 것도 이것에 유용하지 않은 것 같습니다. 여기서 뭔가 빠졌나요? 이것에 대한 기능이 있습니까?


해당 형식의 문자열로 되돌리려면;

SELECT 
  CONVERT(CHAR(4), date_of_birth, 100) + CONVERT(CHAR(4), date_of_birth, 120) 
FROM customers

다른 형식 옵션은 다음과 같습니다.


select 
datepart(month,getdate()) -- integer (1,2,3...)
,datepart(year,getdate()) -- integer
,datename(month,getdate()) -- string ('September',...)

SQL Server 2012부터 다음을 사용할 수 있습니다.

SELECT FORMAT(@date, 'yyyyMM')

사용하다:

select datepart(mm,getdate())  --to get month value
select datename(mm,getdate())  --to get name of month

재미있게도 저는 SQL Server와 LINQ에서 동일한 쿼리를 작성하고있었습니다.

SELECT 
    DATENAME(mm, article.Created) AS Month, 
    DATENAME(yyyy, article.Created) AS Year, 
    COUNT(*) AS Total 
FROM Articles AS article 
GROUP BY 
    DATENAME(mm, article.Created), 
    DATENAME(yyyy, article.Created) 
ORDER BY Month, Year DESC

다음 출력 (예제)을 생성합니다.

Month | Year | Total

January | 2009 | 2

SQL Server 2012에서는 아래를 사용할 수 있습니다.

FORMAT (getdate (), 'MMM yyyy') 선택

정확한 "2016 년 6 월"을 제공합니다.


이건 어때요?

Select DateName( Month, getDate() ) + ' ' + DateName( Year, getDate() )

( Month(Created) + ',' + Year(Created) ) AS Date

그 형식은 존재하지 않습니다. 두 가지를 조합해야합니다.

select convert(varchar(4),getdate(),100)  + convert(varchar(4),year(getdate()))

이를 수행하는 가장 좋은 방법은 다음과 같습니다.

dateadd(month,datediff(month,0,*your_date*),0)

it will keep your datetime type


returns the full month name, -, full year e.g. March-2017

CONCAT(DATENAME(mm, GetDate()), '-', DATEPART(yy, GetDate()))

I had the same problem and after looking around I found this:

SELECT DATENAME(yyyy, date) AS year
FROM Income
GROUP BY DATENAME(yyyy, date)

It's working great!


Converting the date to the first of the month allows you to Group By and Order By a single attribute, and it's faster in my experience.

declare @mytable table(mydate datetime)
declare @date datetime
set @date = '19000101'
while @date < getdate() begin
    insert into @mytable values(@date)
    set @date = dateadd(day,1,@date)
end

select count(*) total_records from @mytable

select dateadd(month,datediff(month,0,mydate),0) first_of_the_month, count(*) cnt
from @mytable
group by dateadd(month,datediff(month,0,mydate),0)

---Lalmuni Demos---
create table Users
(
userid int,date_of_birth date
)
---insert values---
insert into Users values(4,'9/10/1991')

select DATEDIFF(year,date_of_birth, getdate()) - (CASE WHEN (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()),date_of_birth)) > getdate() THEN 1 ELSE 0 END) as Years, 
MONTH(getdate() - (DATEADD(year, DATEDIFF(year, date_of_birth, getdate()), date_of_birth))) - 1 as Months, 
DAY(getdate() - (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()), date_of_birth))) - 1 as Days,
from users

cast(cast(sq.QuotaDate as date) as varchar(7))

gives "2006-04" format


The question is about SQL Server 2005, many of the answers here are for later version SQL Server.

select convert (varchar(7), getdate(),20)
--Typical output 2015-04

SQL Server 2005 does not have date function which was introduced in SQL Server 2008


Yes, you can use datename(month,intime) to get the month in text.


  ,datename(month,(od.SHIP_DATE)) as MONTH_

Answer: MONTH_ January January September October December October September


It's work great.

DECLARE @pYear VARCHAR(4)

DECLARE @pMonth VARCHAR(2)

DECLARE @pDay VARCHAR(2)

SET @pYear  = RIGHT(CONVERT(CHAR(10), GETDATE(), 101), 4)

SET @pMonth = LEFT(CONVERT(CHAR(10), GETDATE(), 101), 2)

SET @pDay   = SUBSTRING(CONVERT(CHAR(10), GETDATE(), 101), 4,2)

SELECT @pYear,@pMonth,@pDay

The following works perfectly! I just used it, try it out.

date_format(date,'%Y-%c')

참고URL : https://stackoverflow.com/questions/45535/get-month-and-year-from-a-datetime-in-sql-server-2005

반응형