Mengkonversi Nomor Bulan menjadi Fungsi Nama Bulan di SQL

210

Saya memiliki bulan disimpan di SQL Server sebagai 1,2,3,4, ... 12. Saya ingin menampilkannya sebagai Januari, Februari, dll. Apakah ada fungsi di SQL Server seperti MonthName (1) = Januari? Saya mencoba menghindari pernyataan KASUS, jika memungkinkan.

Saif Khan
sumber

Jawaban:

158

Agak sedikit tetapi harus bekerja:

SELECT DATENAME(month, DATEADD(month, @mydate-1, CAST('2008-01-01' AS datetime)))
Alexander Kojevnikov
sumber
2
Mengapa '-1'? Apakah itu diperlukan karena bulan-bulan di SQL Server diimbangi dengan satu?
Hassan Gulzar
2
@ DoomerDGR8 itu sebenarnya karena tanggal yang digunakan untuk seed fungsi dateadd dimulai pada 1. jika kita membutuhkan nama file Januari, kita akan menambahkan 1 bulan ke 2008-01-01, yang akan memberi kita 2008-02-01, yang merupakan Februari. jadi kami mengurangi 1 untuk memperhitungkan ini, dan kami mendapatkan Januari lagi.
DForck42
Untuk menyiasati masalah pengurangan 1 dari datetime Anda, gunakan datetime pada bulan Desember sebagai lawan dari Januari. Misalnya SELECT DATENAME (bulan, DATEADD (bulan, @mydate, CAST ('1978-12-01' SEBAGAIMANA)))
Steve Matthews
3
Ini adalah informasi yang bagus, tetapi gagal untuk benar-benar menjawab pertanyaan tentang bagaimana mengonversi angka bulan menjadi nama bulan (Alih-alih menjawab cara mendapatkan nama bulan dari tanggal). Anda berasumsi bahwa dia memiliki nilai datetime daripada hanya angka bulan; untuk membuatnya berfungsi, Anda sekarang perlu 'menciptakan' nilai tanggal / waktu. Pikirkan solusi dari leoinfo sedikit lebih relevan
schizoid04
277

Saya pikir ini adalah cara terbaik untuk mendapatkan nama bulan ketika Anda memiliki nomor bulan

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

Atau

Select DateName( month , DateAdd( month , @MonthNumber , -1 ) )
leoinfo
sumber
24
untuk tujuan keterbacaan, saya akan menulisnya seperti ini: Pilih DateName (bulan, DateAdd (bulan, @MonthNumber - 1, '1900-01-01'))
Valentino Vranken
10
satu kemungkinan solusi alternatif Pilih DateName (bulan, DateAdd (bulan, @MonthNumber, -1))
Asif
4
Itu sempurna. Ini seharusnya jawabannya.
Gotqn
94
SELECT DATENAME(month, GETDATE()) AS 'Month Name'
Dharamvir
sumber
3
Ini mendapatkan nama bulan berdasarkan tanggal bukan nomor bulan, seperti yang diminta SO.
Imad
72
SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3)
Darryl Martin
sumber
9
Saya suka cara berpikir alternatif yang sangat kiri ini! Makanan untuk dipikirkan
Michael Rodrigues
2
Dan itu deterministik! Dapat digunakan sebagai kolom yang dihitung juga, terima kasih!
Irawan Soetomo
1
bagus ... saya sedang mencari beberapa kode sederhana untuk mendapatkan berbulan-bulan dari Januari ke [#] dan ini bekerja dengan baik. untuk menampilkan beberapa bulan, ubah saja menjadi seperti ini >> SUBSTRING ('JAN FEB MAR APR Mei MEI JUL AUG SEP OCT NOV DEC', 0, (@intMonth * 4))
Pablo Contreras
2
Saya pasti tidak akan menganggap ini sebagai "jalan yang benar," tetapi itu cara yang menyenangkan yang dapat digunakan untuk menyelesaikan masalah lain.
Paul
31

Gunakan cara terbaik

Select DateName( month , DateAdd( month , @MonthNumber , -1 ))
Seolah-olah
sumber
21

Ini sangat sederhana.

select DATENAME(month, getdate())

output: Januari

Saeed ur Rehman
sumber
4
Ini hanya berfungsi jika Anda memiliki nilai tanggal penuh, bukan bilangan bulat sebulan.
gunr2171
2
Ini bukan jawaban untuk pertanyaan itu. Dia bertanya bagaimana mengimplementasikan fungsi seperti MonthName (1).
Amuliar
8

Anda dapat menggunakan CONVERTfungsi bawaan

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

Ini akan menampilkan 3 karakter pertama bulan (JAN, FEB dll.)

Marcus
sumber
7

selain asli

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

kamu bisa melakukan ini

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

dengan cara ini Anda mendapatkan nama untuk semua baris dalam sebuah tabel. di mana [nama_kolom] mewakili kolom integer yang berisi nilai numerik 1 hingga 12

2 mewakili bilangan bulat apa pun, dengan string kontak saya membuat tanggal di mana saya dapat mengekstrak bulan. '/ 1/2011' dapat tanggal kapan saja

jika Anda ingin melakukan ini dengan variabel

DECLARE @integer int;

SET @integer = 6;

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

sumber
7

Berikut ini berfungsi untuk saya:

CAST(GETDATE() AS CHAR(3))
unitario
sumber
6

Gunakan pernyataan ini untuk mengonversi nilai numerik Bulan ke nama Bulan.

SELECT CONVERT(CHAR(3), DATENAME(MONTH, GETDATE()))
Ashish Singh
sumber
Kecuali saya salah ini tidak menggunakan integer, seperti yang diminta OP.
influen
5

Di beberapa lokal seperti Ibrani, ada bulan kabisat tergantung pada tahun sehingga untuk menghindari kesalahan di lokasi tersebut Anda dapat mempertimbangkan solusi berikut:

SELECT DATENAME(month, STR(YEAR(GETDATE()), 4) + REPLACE(STR(@month, 2), ' ', '0') + '01')     
Jim Burger
sumber
1
Apakah ada fungsi untuk mengubah tanggal menjadi tanggal Yahudi di SQL? Bukannya saya tahu ...
Hila DG
fungsi untuk mengkonversi ke tanggal Yahudi: blogs.microsoft.co.il/gerireshef/2011/03/29/…
AJ AJ
5

Tentu ini akan berhasil

select datename(M,GETDATE())
Shyam Sa
sumber
5

Dimulai dengan SQL Server 2012, Anda dapat menggunakan FORMAT dan DATEFROMPARTS untuk menyelesaikan masalah ini. (Jika Anda ingin nama bulan dari budaya lain, ubah en-US:)

select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMMM', 'en-US')

Jika Anda ingin bulan tiga huruf:

select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMM', 'en-US')

Jika Anda benar-benar ingin, Anda dapat membuat fungsi untuk ini:

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
Paul
sumber
Ini yang saya cari. Terima kasih atas solusinya.
Abdullah Al Mamun
Ini mungkin bukan yang paling efisien, tetapi mungkin yang paling mudah dibaca.
Paul
1
Bahkan mendukung lokalisasi! .. manis!
Rosdi Kasim
4

Anda dapat menggunakan fungsi konversi seperti di bawah ini

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

Cukup kurangi bulan saat ini dari tanggal hari ini, lalu tambahkan kembali nomor bulan Anda. Kemudian gunakan fungsi nama file untuk memberikan nama lengkap semua dalam 1 baris.

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

Saya pikir ini cukup untuk mendapatkan nama bulan saat Anda berkencan.

SELECT DATENAME(month ,GETDATE())
Benazir
sumber
3
SELECT DateName(M, DateAdd(M, @MONTHNUMBER, -1))
Yesaya
sumber
3

Untuk mengonversi angka bulan ke nama bulan, coba yang berikut ini

declare @month smallint = 1
select DateName(mm,DATEADD(mm,@month - 1,0))
M2012
sumber
3
SELECT DATENAME(MONTH,dateadd(month, -3,getdate()))
gvila
sumber
1

Yang ini bekerja untuk saya:

@MetricMonthNumber (some number)

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

Dari pos di atas dari @leoinfo dan @Valentino Vranken. Lakukan saja seleksi cepat dan berfungsi.

Roadrunner327
sumber
1
Declare @MonthNumber int
SET @MonthNumber=DatePart(Month,GETDATE())
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )

Penjelasan:

  1. Variabel Decalre pertama MonthNumber
  2. Dapatkan Bulan Ini untuk DatePartNomor Bulan Pengembalian
  3. Nama Bulan Pengembalian Kueri Ketiga
Wafa Abbas
sumber
1
select monthname(curdate());

ATAU

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

Bekerja untukku

SELECT MONTHNAME(<fieldname>) AS "Month Name" FROM <tablename> WHERE <condition>
Kashif Aslam
sumber
1

Anda bisa mendapatkan tanggal seperti ini. misalnya: - Tabel pengguna

id name created_at
1  abc  2017-09-16
2  xyz  2017-06-10

Anda bisa mendapatkan nama bulan seperti ini

select year(created_at), monthname(created_at) from users;

keluaran

+-----------+-------------------------------+
| year(created_at) | monthname(created_at)  |
+-----------+-------------------------------+
|      2017        | september              |
|      2017        | june                   |
Janaka Pushpakumara
sumber
Anda dapat menemukan dokumentasi di sini. w3resource.com/mysql/date-and-time-functions/…
Janaka Pushpakumara
OP meminta sql-server bukan mysql.
tavalendo
0

Gunakan pernyataan ini untuk mendapatkan nama bulan:

DECLARE @date datetime
SET @date='2015/1/4 00:00:00'

SELECT CAST(DATENAME(month,@date )  AS CHAR(3))AS 'Month Name'

Ini akan memberi Anda nama bulan pendek. Seperti ini: Jan, Feb, Mar, dll.

pengguna4972370
sumber
0

Ini solusi saya menggunakan beberapa informasi dari orang lain untuk menyelesaikan masalah.

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

Tidak ada fungsi sistem yang didefinisikan dalam SQL server. Tetapi Anda dapat membuat sendiri fungsi yang ditentukan pengguna - fungsi skalar. Anda akan menemukan fungsi skalar di Object Explorer untuk database Anda: Programmability-> Functions-> Functions-dihargai Functions. Di bawah ini, saya menggunakan variabel tabel untuk menyatukan semuanya.

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

Anda dapat membuat fungsi seperti ini untuk menghasilkan Bulan dan melakukan SELECT dbo.fn_GetMonthFromDate (date_column) sebagai 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
Seth Winters
sumber
0

Cara termudah adalah dengan memanggil fungsi MONTHNAME(your_date). tanggal_anda bisa berupa nilai statis atau nilai dari salah satu bidang tabel Anda.

Armand Mamitiana Rakotoarisoa
sumber
0

SELECT MONTHNAME (concat ('1970 -', [Month int val], '- 01'))

example- SELECT MONTHNAME (concat ('1970 -', 4, '- 01'))

jawaban- April

Atanu Samanta
sumber