web-dev-qa-db-ja.com

SQLでの月番号から月名への変換関数

SQL Serverに1、2、3、4、... 12の月を格納しています。 1月、2月などとして表示したいのですが、SQL ServerにMonthName(1)= Januaryのような関数はありますか。可能であれば、CASEステートメントを避けようとしています。

195
Saif Khan

ちょっとハッキーですが、うまくいくはずです。

SELECT DATENAME(month, DATEADD(month, @mydate-1, CAST('2008-01-01' AS datetime)))
149

月数 がある場合は、これが 月名 を取得するための最良の方法だと思います。

Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )

または

Select DateName( month , DateAdd( month , @MonthNumber , -1 ) )
245
leoinfo
SELECT DATENAME(month, GETDATE()) AS 'Month Name'
90
Dharamvir
SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3)
63
Darryl Martin

最善の方法を使う

Select DateName( month , DateAdd( month , @MonthNumber , -1 ))
30
Asif

とても簡単です。

select DATENAME(month, getdate())

出力:1月

21
Saeed ur Rehman

月の数値を月の名前に変換するには、この文を使用します。

SELECT CONVERT(CHAR(3), DATENAME(MONTH, GETDATE()))
5
Ashish Singh

以下は私のために働きます:

CAST(GETDATE() AS CHAR(3))
5
unitario

組み込みのCONVERT関数を使うことができます

select CONVERT(varchar(3), Date, 100)  as Month from MyTable.

これは月の最初の3文字(JAN、FEBなど)を表示します。

5
Tagore Peethala

オリジナルに加えて

SELECT DATENAME(m, str(2) + '/1/2011')

あなたはこれを行うことができます

SELECT DATENAME(m, str([column_name]) + '/1/2011')

このようにして、テーブル内のすべての行の名前を取得します。 [column_name]は、1から12までの数値を含む整数列を表します。

2は任意の整数を表し、連絡先文字列iでは月を抽出できる日付を作成しました。 '/ 1/2011'は任意の日付にすることができます

あなたが変数でこれをしたいならば

DECLARE @integer int;

SET @integer = 6;

SELECT DATENAME(m, str(@integer) + '/1/2011')
5
user275683

ヘブライ語のようないくつかのロケールでは、 うるう月 /年に依存するので、そのようなロケールでのエラーを避けるために、あなたは以下の解決策を考えるかもしれません:

SELECT DATENAME(month, STR(YEAR(GETDATE()), 4) + REPLACE(STR(@month, 2), ' ', '0') + '01')     
4
Jim Burger

以下のように変換機能を使用できます

CONVERT(VARCHAR(3), DATENAME(MM, GETDATE()), 100)
3
Nori

確かにこれは動作します

select datename(M,GETDATE())
3
Shyam Sa

今日の日付から現在の月を引いて、それからあなたの月の数を足してください。次に、datename関数を使用して、フルネームを1行にまとめて入力します。

print datename(month,dateadd(month,-month(getdate()) + 9,getdate()))
3
Geoffrey Fuller

月番号を月名に変換するには、以下を試してください。

declare @month smallint = 1
select DateName(mm,DATEADD(mm,@month - 1,0))
2
M2012

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
2
Paul

日付があるときに月の名前を取得するにはこれで十分だと思います。

SELECT DATENAME(month ,GETDATE())
2
Benazir

私のために働く

SELECT MONTHNAME(<fieldname>) AS "Month Name" FROM <tablename> WHERE <condition>
1
Kashif Aslam
select monthname(curdate());

OR

select monthname('2013-12-12');
1
Piyush

あなたはこのような日付を手に入れることができます。例: - Users table

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                   |
1
SELECT DATENAME(MONTH,dateadd(month, -3,getdate()))
1
gvila
Declare @MonthNumber int
SET @MonthNumber=DatePart(Month,GETDATE())
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )

説明:

  1. 最初のDecalre変数MonthNumber
  2. 月番号を返すDatePartの現在の月を取得
  3. 3番目のクエリ戻り月名
1
Wafa Abbas

これは私のために働いた:

@MetricMonthNumber (some number)

SELECT 
(DateName( month , DateAdd( month , @MetricMonthNumber - 1 , '1900-01-01' ) )) AS MetricMonthName
FROM TableName

@leoinfoと@Valentino Vrankenの上の投稿から。クイックセレクトをしただけでうまくいきます。

1
Roadrunner327
SELECT DateName(M, DateAdd(M, @MONTHNUMBER, -1))
1
Isaiah

最も簡単な方法は、関数MONTHNAME(your_date)を呼び出すことです。 your_date は静的な値か、テーブルフィールドの1つからの値です。

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]
0
Charlie Brown

これは、問題を解決するために他の人からの情報を使った私の解決策です。

datename(month,dateadd(month,datepart(month,Help_HelpMain.Ticket_Closed_Date),-1)) as monthname
0
lancepants28

このような関数を作成して月を生成し、月FROM table_nameとしてSELECT dbo.fn_GetMonthFromDate(date_column)を実行できます


/****** 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
0
Seth Winters

月名を取得するには、次の文を使用します。

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月など.

0
user4972370