Câu trả lời:
Một chút hack nhưng nên hoạt động:
SELECT DATENAME(month, DATEADD(month, @mydate-1, CAST('2008-01-01' AS datetime)))
Tôi nghĩ rằng đây là cách tốt nhất để có được tên tháng khi bạn có số tháng
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )
Hoặc là
Select DateName( month , DateAdd( month , @MonthNumber , -1 ) )
SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3)
Nó rất đơn giản.
select DATENAME(month, getdate())
sản lượng: tháng 1
ngoài bản gốc
SELECT DATENAME(m, str(2) + '/1/2011')
bạn có thể làm được việc này
SELECT DATENAME(m, str([column_name]) + '/1/2011')
bằng cách này bạn có được tên cho tất cả các hàng trong một bảng. trong đó [cột_name] biểu thị một cột số nguyên chứa giá trị số từ 1 đến 12
2 đại diện cho bất kỳ số nguyên nào, bằng chuỗi liên hệ i đã tạo một ngày mà tôi có thể trích xuất tháng. '/ 1/2011' có thể là bất kỳ ngày nào
nếu bạn muốn làm điều này với biến
DECLARE @integer int;
SET @integer = 6;
SELECT DATENAME(m, str(@integer) + '/1/2011')
Sử dụng câu lệnh này để chuyển đổi giá trị số Tháng thành tên Tháng.
SELECT CONVERT(CHAR(3), DATENAME(MONTH, GETDATE()))
Ở một số địa phương như tiếng Do Thái, có những tháng nhuận phụ thuộc vào năm vì vậy để tránh sai sót ở những địa phương đó, bạn có thể xem xét giải pháp sau:
SELECT DATENAME(month, STR(YEAR(GETDATE()), 4) + REPLACE(STR(@month, 2), ' ', '0') + '01')
Bắt đầu với SQL Server 2012, bạn có thể sử dụng FORMAT và DATEFROMPARTS để giải quyết vấn đề này. (Nếu bạn muốn tên tháng từ các nền văn hóa khác, hãy thay đổi en-US
:)
select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMMM', 'en-US')
Nếu bạn muốn một tháng ba chữ cái:
select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMM', 'en-US')
Nếu bạn thực sự muốn, bạn có thể tạo một chức năng cho việc này:
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
Chỉ cần trừ tháng hiện tại kể từ ngày hôm nay, sau đó thêm lại số tháng của bạn. Sau đó sử dụng hàm datename để cung cấp tên đầy đủ trong 1 dòng.
print datename(month,dateadd(month,-month(getdate()) + 9,getdate()))
Cái này làm việc cho tôi:
@MetricMonthNumber (some number)
SELECT
(DateName( month , DateAdd( month , @MetricMonthNumber - 1 , '1900-01-01' ) )) AS MetricMonthName
FROM TableName
Từ một bài đăng ở trên từ @leoinfo và @Valentino Vranken. Chỉ cần chọn nhanh và nó hoạt động.
Declare @MonthNumber int
SET @MonthNumber=DatePart(Month,GETDATE())
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )
Giải thích:
MonthNumber
DatePart
mà số tháng trở lạiLàm việc cho tôi
SELECT MONTHNAME(<fieldname>) AS "Month Name" FROM <tablename> WHERE <condition>
bạn có thể có được ngày như thế này. ví dụ: - Bảng người dùng
id name created_at
1 abc 2017-09-16
2 xyz 2017-06-10
bạn có thể lấy tên tháng như thế này
select year(created_at), monthname(created_at) from users;
đầu ra
+-----------+-------------------------------+
| year(created_at) | monthname(created_at) |
+-----------+-------------------------------+
| 2017 | september |
| 2017 | june |
Sử dụng tuyên bố này để nhận tên tháng:
DECLARE @date datetime
SET @date='2015/1/4 00:00:00'
SELECT CAST(DATENAME(month,@date ) AS CHAR(3))AS 'Month Name'
Điều này sẽ cung cấp cho bạn tên tháng ngắn. Như thế này: tháng một, tháng hai, tháng ba, vv
Đây là giải pháp của tôi sử dụng một số thông tin từ những người khác để giải quyết vấn đề.
datename(month,dateadd(month,datepart(month,Help_HelpMain.Ticket_Closed_Date),-1)) as monthname
Không có chức năng xác định hệ thống trong máy chủ SQL. Nhưng bạn có thể tạo hàm do người dùng xác định - hàm vô hướng. Bạn sẽ tìm thấy các hàm vô hướng trong Object Explorer cho cơ sở dữ liệu của mình: Khả năng lập trình-> Hàm-> Hàm có giá trị vô hướng. Dưới đây, tôi sử dụng một biến bảng để kết hợp tất cả lại với nhau.
--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]
Bạn có thể tạo một hàm như thế này để tạo Tháng và thực hiện CHỌN dbo.fn_GetMonthFromDate (date_column) dưới dạng Tháng TỪ tên_bảng
/****** 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
Cách dễ nhất là bằng cách gọi hàm MONTHNAME(your_date)
. your_date có thể là một giá trị tĩnh hoặc giá trị từ một trong các trường bảng của bạn.
CHỌN MONTHNAME (concat ('1970 -', [Tháng int val], '- 01'))
ví dụ- CHỌN MONTHNAME (concat ('1970 -', 4, '- 01'))
trả lời- tháng 4