powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / GetDate() в UDF
11 сообщений из 11, страница 1 из 1
GetDate() в UDF
    #32048260
Alex_s_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Несколко корявая тема, но всёже...
Немного предистории(типа вводные данные):
Имеется таблица транзакций(проводок), каждая запись ессно имеет поле datetime(когда зделано) и понятное дело в этом пространсте есть дыры (выходные, праздики...).
НО для определенного рода расчетов необходимо иметь НЕПРЕРЫВНЫЙ интервал с начала до сегодня.
Напрашивается решение-функция возвращающая его родимого.
Проблема определить в теле функции сегодняшнее число.
GetDate()- ф-ция Nondeterministic и посему в UDF не катит.
Обращаюсь с огромной просьбой - подскажите приемлимое решение. На базе этого чегото (решения) необходимо будет построить view с перечнем дат.
P.S. Os W2K Server + SQL2K
...
Рейтинг: 0 / 0
GetDate() в UDF
    #32048263
Doc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слушай, а ты не думал что можно значение GETDATE() передавать параметром. Я так и делаю если мне нужно в UDF значение даты СЕЙЧАС().

Удачи.
...
Рейтинг: 0 / 0
GetDate() в UDF
    #32048273
Alex_s_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да конечно один из вариантов.
Что-то подобное я и накропал, только что-то не клеится с передачей параметра.
Предупреждаю сразу - в MSSQL не силен поэтому могу соорудить ахинею
Фунция такова
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE FUNCTION fDateToNow(@TD as DateTime)
  
RETURNS @DateTN TABLE 
	(SDate DateTime NOT NULL primary key)
AS
BEGIN
	DECLARE @MaxDate DateTime
	DECLARE @MinDate DateTime

	SELECT @MinDate =MIN(Mov_DATE) FROM tbl_Movies
	SET @MaxDate = @TD
		
	WHILE @MinDate <=@MaxDate
		Begin
			INSERT INTO @DateTN VALUES(@MinDate)
			SET @MinDate = @MinDate + 1 
		End

	RETURN 
END

Интересует как должен выглядеть SELECT...
Когда пытаюсь изобразить нечто вроде
Код: plaintext
SELECT * FROM fDateToNow(GetDate()) Dat

В ответ получаю Server: Msg 170, Level 15, State 1, Line 1 Line 1: Incorrect syntax near '('.
Если вместо GetDate() влепить дату в чистом виде то шпиляет.
Весь фокус в том и состоит, что я должен получить в конечном итоге view при опросе которого в любой момент там УЖЕ БЫЛА текущая дата. Не буду же я этот view редактировать каждую полночь...
...
Рейтинг: 0 / 0
GetDate() в UDF
    #32048303
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
незнаю насколько это поможет, но вот такой вариант обхода недетерминированности с датой
создаём такой вид:
Код: plaintext
create view v_now as select getdate() d

далее пишем функцию, которая возвращает как раз текущую дату:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
create function f_now() 
returns datetime
as
begin
declare @d datetime
select @d= d from v_now
return @d
end

Естественно функцию можно развить.
Кстати только щас до меня дошло, что таким образом можно осуществить вековую мечту народов и написать скалярную функцию, которая возвращает случайное число
...
Рейтинг: 0 / 0
GetDate() в UDF
    #32048306
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гениально!!!!!!!!!!!!!

Действительно, работает!!!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create view v_rnd 
as 
	select rand() rnd
go

create function f_now()
	returns float
as
begin
	declare @r float
	select @r = rnd from v_rnd
	return @r
end

go
select dbo.f_now() from sysobjects
...
Рейтинг: 0 / 0
GetDate() в UDF
    #32048313
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper!!!! Моя давно подавленная мечта о дате в функции реализовалась :-)
Спасибище! :-))
...
Рейтинг: 0 / 0
GetDate() в UDF
    #32048322
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дааа, просто здорово !!!!
...
Рейтинг: 0 / 0
GetDate() в UDF
    #32048483
Alex_s_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ОГРОМАДНЕЙШЕЕ СПАСИБИЩЕ !!!!
Все работает аж шуба заворачивается.
...
Рейтинг: 0 / 0
GetDate() в UDF
    #32064605
MIN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения за ложку дегдя :)
А оптимизатор на этом не сдохнет?
Не зря же те правила понапридумываны
...
Рейтинг: 0 / 0
GetDate() в UDF
    #32064610
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Min
В данном случае оптимизатор поднимет руки и сделает простой перебор. Но альтернатива этому - цикл с курсором.
...
Рейтинг: 0 / 0
GetDate() в UDF
    #32064612
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот курсор не нужен.....
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / GetDate() в UDF
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]