Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как сделать SET DATEFIRST 1 на уровне функции?  [new]
avoda
Member

Откуда: Germany
Сообщений: 396
Всем привет!

Есть Microsoft SQL-Server 2003. Есть база данных. Стандартный language для коннектa english и должен оставиться english. Есть User Function. В этой функции мы хотим поставить SET DATEFIRST 1.

Но функция не узнает комманду set и ругается. Помогите пожалуйста плз!!!

Заранее спасибо!!!!!
20 дек 05, 18:22    [2191750]     Ответить | Цитировать Сообщить модератору
 Re: как сделать SET DATEFIRST 1 на уровне функции?  [new]
RENaissance
Member

Откуда: Муром->Москва
Сообщений: 10895

В User Functions нельзя использовать команду SET


Posted via ActualForum NNTP Server 1.3

20 дек 05, 18:27    [2191781]     Ответить | Цитировать Сообщить модератору
 Re: как сделать SET DATEFIRST 1 на уровне функции?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Системная переменная @@DATEFIRST поможет вам
20 дек 05, 18:27    [2191784]     Ответить | Цитировать Сообщить модератору
 Re: как сделать SET DATEFIRST 1 на уровне функции?  [new]
avoda
Member

Откуда: Germany
Сообщений: 396
Glory
Системная переменная @@DATEFIRST поможет вам


можно поподробнее? насколько я знаю она возращает акт. настройку, а мне нужно задать настройку.
20 дек 05, 18:34    [2191823]     Ответить | Цитировать Сообщить модератору
 Re: как сделать SET DATEFIRST 1 на уровне функции?  [new]
Glory
Member

Откуда:
Сообщений: 104760
avoda
Glory
Системная переменная @@DATEFIRST поможет вам


можно поподробнее? насколько я знаю она возращает акт. настройку, а мне нужно задать настройку.

Ну если известна текущая настройка, то разве нельзя скорректировать вычисления внутри UDF ?
20 дек 05, 18:36    [2191837]     Ответить | Цитировать Сообщить модератору
 Re: как сделать SET DATEFIRST 1 на уровне функции?  [new]
avoda
Member

Откуда: Germany
Сообщений: 396
Glory
avoda
Glory
Системная переменная @@DATEFIRST поможет вам


можно поподробнее? насколько я знаю она возращает акт. настройку, а мне нужно задать настройку.

Ну если известна текущая настройка, то разве нельзя скорректировать вычисления внутри UDF ?


можно примерчик?
20 дек 05, 18:38    [2191848]     Ответить | Цитировать Сообщить модератору
 Re: как сделать SET DATEFIRST 1 на уровне функции?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Например для номера дня в "русской" неделе
declare @Date datetime
set @Date = GetDate()
select case
	when datepart(dw, @Date) + @@datefirst - 1 > 7 then datepart(dw, @Date) + @@datefirst - 1 - 7
	else datepart(dw, @Date) + @@datefirst - 1
end
20 дек 05, 18:44    [2191885]     Ответить | Цитировать Сообщить модератору
 Re: как сделать SET DATEFIRST 1 на уровне функции?  [new]
avoda
Member

Откуда: Germany
Сообщений: 396
Glory
Например для номера дня в "русской" неделе
declare @Date datetime
set @Date = GetDate()
select case
	when datepart(dw, @Date) + @@datefirst - 1 > 7 then datepart(dw, @Date) + @@datefirst - 1 - 7
	else datepart(dw, @Date) + @@datefirst - 1
end


Большое спасибо, попробую!
20 дек 05, 18:50    [2191909]     Ответить | Цитировать Сообщить модератору
 Re: как сделать SET DATEFIRST 1 на уровне функции?  [new]
avoda
Member

Откуда: Germany
Сообщений: 396
CREATE FUNCTION Kw_Year (@Dat datetime)
RETURNS integer
AS
BEGIN 
declare @KW integer
declare @Datum as datetime

set @KW=0
set @datum='01/01/' + cast(year(@dat) as nvarchar(4))
set @Dat=@Dat+1	

if datepart(dw,@datum)-1 >= 5
	begin
	    if DATEPART(dw, @dat)=1
	         begin
		set @KW=DATEPART(week, @dat)-2
	         end
	    else
	         begin
		set @KW=DATEPART(week, @dat)-1
	         end
	    if @KW =0
		begin
		    if datepart(dw,'01/01/' + cast(year(@dat)-1 as nvarchar(4))) >= 5
			begin
			set @KW=DATEPART(week, dateadd(day,-1,@datum))-1
			end
		    else
			begin
			set @KW=DATEPART(week, dateadd(day,-1,@datum))
			end
		end
	end
else
	begin	
	    set @KW=DATEPART(week, @dat)
	end
return (@KW)
END

эта функция возвращает мне номер недели (например неделя 50). Если установлена английская схема тогда при задания воскресенье 18 декабря 2005 показывается неделя 51. А мне нужно чтобы неделя 50 показывалась и только с понедельника 51. Вот как это здесь осуществить я и не знаю...
20 дек 05, 19:02    [2191950]     Ответить | Цитировать Сообщить модератору
 Re: как сделать SET DATEFIRST 1 на уровне функции?  [new]
avoda
Member

Откуда: Germany
Сообщений: 396
никто не поможет???
21 дек 05, 10:44    [2193100]     Ответить | Цитировать Сообщить модератору
 Re: как сделать SET DATEFIRST 1 на уровне функции?  [new]
ламер123
Guest
мне тоже интересно посмотреть на примерчик как переписать datepart(week,@d) чтобы он работал с "русскими" неделями
или подскажите хотя бы как сказать SET DATEFIRST 1 раз и навсегда на уровне сервера
21 дек 05, 12:20    [2193785]     Ответить | Цитировать Сообщить модератору
 Re: как сделать SET DATEFIRST 1 на уровне функции?  [new]
Glory
Member

Откуда:
Сообщений: 104760
ламер123
или подскажите хотя бы как сказать SET DATEFIRST 1 раз и навсегда на уровне сервера

Никак. Эта установка зависит от заданного в коннекте language.
Либо это default language заданный в свойствах конкретного логина, либо SET LANGUAGE переданная клиентом серверу после коннекта
21 дек 05, 14:35    [2194659]     Ответить | Цитировать Сообщить модератору
 Re: как сделать SET DATEFIRST 1 на уровне функции?  [new]
avoda
Member

Откуда: Germany
Сообщений: 396
можно сразу после коннекта передать set datefirst 1. действуем на время коннекта.
21 дек 05, 17:22    [2195749]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить