SQL DATEから月と年のみを取得する


133

SQL ServerのDateフィールドからMonth.Yearにのみアクセスする必要があります。

回答:


170

うまくすでに与えられた提案のように、私はあなたの質問から推測することができます一つの他のpossiblityがあります:
-あなたはまだ結果が日付になりたい
-しかし、あなたは「廃棄」日、時間、などにしたい
-年を残して/月日付フィールドのみ

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 2014

1
@dss-どのパラメーターを使用しますか?実際のSQLを見せてください。
MatBailie 2014

@MatBailie SELECT DATEADD(MONTH、DATEDIFF(MONTH、0、LastSaleDate)、0)AS [year_month_date_field] FROM db1.products where productID = 123 "LastSaleDate"列は "(datetime、not null)"として宣言され、次のようになります。 2014-09-01 00:00:00.000
Dss

1
@DSS-はい、それは正しいようです。これは、2014年9月の初めに切り捨てられます。「年と月のみ」のデータ型がないため、毎月の最初の瞬間を使用するのが標準的な方法です。このDATETIME値を文字列(アプリケーションレイヤー、プレゼンテーションレイヤー、レポートレイヤーなど)に変換するときは、年と月の部分だけでフォーマットすることを常に選択できます。しかし、「データベース内」のデータ操作に関しては、これは正しいです。
MatBailie 2014

おそらくあなたの答えは「日付」フィールドで使用することを意図していたのだろうが、私は「日付」フィールドを使用しているので、それがおそらく問題です。
Dss 2014

133
select month(dateField), year(dateField)

2
すごい!それらを1つの列に接続できます: 'select cast(month(dateField)as varchar)+'。 ' + cast(year(dateField)as varchar) '
izik f


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

2
SELECT DATEPART(MM、DateVal)は 'MM'を返しません。月が1〜9の場合、1桁を返すだけです。
Jaikrat 2013

「MM」の代わりに「月」と表示する必要があります: 'SELECT DATEPART(month、getdate())'
Renne007


15

それを行うSQL関数は2つあります。

詳細については、リンクされたドキュメントを参照してください。


5
リンクは常に永遠にとどまるとは限らないので、少なくともいくつかの簡単な例を示すことをお勧めします...実際、それらはもはや良くありません。
キャロル

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 ACCESSまたはRODBCサポートしていない可能性SQL SERVERの機能を、しかし持っている任意のデータベースのためのFORMATあなたは、単にこれを行うことができます機能を:

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


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

たとえば、6桁の結果が必要な場合は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'

私の特定のケースでは、次のように、2桁の年を含む3文字の月の省略形にする必要があります。 SELECT LEFT(DATENAME(month, GETDATE()), 3) + '-' + CAST(RIGHT(YEAR(GETDATE()),2) AS nvarchar(2)) AS 'Month-Year'



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) 

2018年3月7日としてフォーマットされた日付の私の望ましい結果を得ました

私の列 'transfer_date'は日時タイプの列であり、AzureでSQL Server 2017を使用しています


0

CONCAT(MONTH(GETDATE())、 '。'、YEAR(GETDATE()))を選択します

出力:5.2020

CONCAT(DATENAME(MONTH、GETDATE())、 '。'、YEAR(GETDATE()))を選択します

出力:2020年5月

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.