1
Я создал скалярную функцию, которая должна вытолкнуть дату в определенном формате на основе переменной. по какой-то причине я получаю сообщение об ошибке «else»MS SQL скалярная функция для форматирования datebased on laguage switch
что я делаю неправильно?
CREATE FUNCTION [dbo].[fGetDateformat] (@datum datetime,@CNotation char(2))
/* accepts datum and CNotation
USAGE:
select fGetDateformat(datum, "EN" or "DE") */
returns varchar(25) AS
BEGIN
declare @ReturnStr varchar(25)
if @Cnotation = 'DE'
set language german
set @ReturnStr =
DATENAME(dd, @datum)+'. '+DATENAME(MM, @datum)+' '+ DATENAME(YEAR, @datum)
else
set @ReturnStr = DATENAME(mm, @datum)+' '+DATENAME(dd, @datum)+', '+ DATENAME(YEAR, @datum)
return @ReturnStr
END
GO
Какую версию SQL Server вы используете? Если вы в 2012 году, вы можете просто использовать функцию формата. – Mithrandir
Это похоже на то, что должно быть обработано в вашем прикладном уровне, а не в SQL. Вы также не можете установить язык внутри функции, вы получите следующую ошибку: 'Недопустимое использование оператора боковой обработки 'SET COMMAND' внутри функции. Если это необходимо сделать в SQL, я бы предложил таблицу календаря с столбцы для разных форматов даты в разных странах, тогда вы можете сделать что-то вроде 'CASE WHEN @Cnotation = 'DE' THEN GermanDateString WHEN @Cnotation = 'US' THEN USDateString ELSE DefaultDateString END' – GarethD
очень согласны с тем, что он должен обрабатываться на прикладном уровне , Я использую систему управления судебными делами, которая предлагает sql как среду сценариев для генерации писем. Уровень приложения не предоставляет доступ к их форматированию здесь (они есть в другом месте), поэтому я застрял с SQL. думал о календарной таблице, но хотел избежать усилий, используя команду set language ... – jrady