回答:
少しハッキーですが、うまくいくはずです:
SELECT DATENAME(month, DATEADD(month, @mydate-1, CAST('2008-01-01' AS datetime)))
これは、月番号があるときに月の名前を取得する最良の方法だと思います
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )
または
Select DateName( month , DateAdd( month , @MonthNumber , -1 ) )
SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3)
オリジナルに加えて
SELECT DATENAME(m, str(2) + '/1/2011')
あなたはこれを行うことができます
SELECT DATENAME(m, str([column_name]) + '/1/2011')
このようにして、テーブルのすべての行の名前を取得します。ここで、[column_name]は、1〜12の数値を含む整数列を表します
2は任意の整数を表し、連絡先文字列によって、月を抽出できる日付を作成しました。'/ 1/2011'は任意の日付にすることができます
これを変数で実行したい場合
DECLARE @integer int;
SET @integer = 6;
SELECT DATENAME(m, str(@integer) + '/1/2011')
ヘブライ語などの一部のロケールでは、年によってうるう月が存在するため、そのようなロケールでのエラーを回避するには、次の解決策を検討します。
SELECT DATENAME(month, STR(YEAR(GETDATE()), 4) + REPLACE(STR(@month, 2), ' ', '0') + '01')
SQL Server 2012以降、FORMATおよびDATEFROMPARTSを使用してこの問題を解決できます。(あなたが他の文化から月の名前をしたい場合は、変更:en-US
)
select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMMM', 'en-US')
3文字の月が必要な場合:
select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMM', 'en-US')
本当にしたい場合は、これのための関数を作成できます。
CREATE FUNCTION fn_month_num_to_name
(
@month_num tinyint
)
RETURNS varchar(20)
AS
BEGIN
RETURN FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMMM', 'en-US')
END
これは私のために働きました:
@MetricMonthNumber (some number)
SELECT
(DateName( month , DateAdd( month , @MetricMonthNumber - 1 , '1900-01-01' ) )) AS MetricMonthName
FROM TableName
上記の@leoinfoと@Valentino Vrankenの投稿から。クイック選択を行っただけで機能します。
このような日付を取得できます。例:- ユーザーテーブル
id name created_at
1 abc 2017-09-16
2 xyz 2017-06-10
このような月名を取得できます
select year(created_at), monthname(created_at) from users;
出力
+-----------+-------------------------------+
| year(created_at) | monthname(created_at) |
+-----------+-------------------------------+
| 2017 | september |
| 2017 | june |
月名を取得するには、次のステートメントを使用します。
DECLARE @date datetime
SET @date='2015/1/4 00:00:00'
SELECT CAST(DATENAME(month,@date ) AS CHAR(3))AS 'Month Name'
これにより、短い月の名前が表示されます。このように:1月、2月、3月など
SQLサーバーにはシステム定義関数はありません。ただし、独自のユーザー定義関数(スカラー関数)を作成できます。データベースのオブジェクトエクスプローラーでスカラー関数を見つけます:プログラマビリティ->関数->スカラー値関数。以下では、テーブル変数を使用してすべてをまとめています。
--Create the user-defined function
CREATE FUNCTION getmonth (@num int)
RETURNS varchar(9) --since 'September' is the longest string, length 9
AS
BEGIN
DECLARE @intMonth Table (num int PRIMARY KEY IDENTITY(1,1), month varchar(9))
INSERT INTO @intMonth VALUES ('January'), ('February'), ('March'), ('April'), ('May')
, ('June'), ('July'), ('August') ,('September'), ('October')
, ('November'), ('December')
RETURN (SELECT I.month
FROM @intMonth I
WHERE I.num = @num)
END
GO
--Use the function for various months
SELECT dbo.getmonth(4) AS [Month]
SELECT dbo.getmonth(5) AS [Month]
SELECT dbo.getmonth(6) AS [Month]
このような関数を作成して月を生成し、SELECT dbo.fn_GetMonthFromDate(date_column)をMonth FROM table_nameとして実行できます。
/****** Object: UserDefinedFunction [dbo].[fn_GetMonthFromDate] Script Date: 11/16/2018 10:26:33 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[fn_GetMonthFromDate]
(@date datetime)
RETURNS varchar(50)
AS
BEGIN
DECLARE @monthPart int
SET @monthPart = MONTH(@date)
IF @monthPart = 1
BEGIN
RETURN 'January'
END
ELSE IF @monthPart = 2
BEGIN
RETURN 'February'
END
ELSE IF @monthPart = 3
BEGIN
RETURN 'March'
END
ELSE IF @monthPart = 4
BEGIN
RETURN 'April'
END
ELSE IF @monthPart = 5
BEGIN
RETURN 'May'
END
ELSE IF @monthPart = 6
BEGIN
RETURN 'June'
END
ELSE IF @monthPart = 7
BEGIN
RETURN 'July'
END
ELSE IF @monthPart = 8
BEGIN
RETURN 'August'
END
ELSE IF @monthPart = 9
BEGIN
RETURN 'September'
END
ELSE IF @monthPart = 10
BEGIN
RETURN 'October'
END
ELSE IF @monthPart = 11
BEGIN
RETURN 'November'
END
ELSE IF @monthPart = 12
BEGIN
RETURN 'December'
END
RETURN NULL END
最も簡単な方法は、関数を呼び出すことですMONTHNAME(your_date)
。your_dateは、静的な値またはテーブルフィールドの1つの値にすることができます。