#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))