Как преобразовать значение int 20140401 в ‘Апрель 2014’ в SQL Server 2008

#sql #sql-server-2008

#sql #sql-server-2008

Вопрос:

Это то, что я пробовал…..

 declare @date varchar(8)

set @date = (select max(convert(varchar(10), fileextractperiod)) 
             from [info-CentralReturns-DEV].CentralReturns.FactCancer)

select CONVERT(varchar(10), cast(@date as DATE), 103)
  

Результирующий вывод: 01/04/2014

Но мне нужен вывод в виде April 2014

Комментарии:

1. если вам нужен другой формат, то, возможно, вам следует использовать что-то другое, чем 103 , что является именно тем, что вы получаете: дд / мм / гггг

2. Почему бы вам не перепроектировать свою базу данных так, чтобы дата оставалась датой? Тогда вам не понадобились бы эти махинации.

3. Вы можете увидеть все доступные системные стили для CONVERT здесь, в MSDN — к сожалению, в SQL Server 2008 еще нет FORMAT команды, доступной в SQL Server 2012 , для использования любого произвольного формата. Я думаю, вам придется выполнить некоторое ручное кодирование здесь

Ответ №1:

SQL Server 2008 поддерживает только ограниченный набор системных стилей для CONVERT — если ни один из них не соответствует вашим потребностям, вам нужно будет справиться с этим самостоятельно. В SQL Server 2012 есть FORMAT функция для этой цели..

Итак, в SQL Server 2008 вы могли бы создать функцию, подобную этой:

 CREATE FUNCTION dbo.FormatDateMonthYear(@input DATE)
RETURNS VARCHAR(50)
AS BEGIN
    DECLARE @Year INT = YEAR(@input)

    DECLARE @MonthName VARCHAR(15) = DATENAME(MONTH, @input)

    DECLARE @Result VARCHAR(50)
    SET @Result = @MonthName   ' '   CAST(@Year AS VARCHAR(4))

    RETURN @Result
END
  

а затем вызвать его, чтобы получить нужный вам формат:

 SELECT dbo.FormatDateMonthYear('2014-04-22')
  

и вы должны получить

 April 2014
  

Ответ №2:

 SELECT 
  CONVERT(CHAR(4), @date, 100)   CONVERT(CHAR(4), @date, 120)
  

Ответ №3:

 SELECT
DateName( month , DateAdd( month , cast(SUBSTRING(@date, 5, 2) as int), -1 ) )
  ' '   SUBSTRING(@date, 1, 4)
  

Ответ №4:

 Select DATENAME(MONTH,@date) ' ' CONVERT(VARCHAR(4),YEAR(@Date))