Опубликовано: 11 окт 02
Рейтинг:
Рейтинг:
Автор: akuz
Прислал: akuz
Представление, предназначенное для обхода ограничения использования
GETDATE() в UDF CREATE VIEW v_now AS SELECT GETDATE() now GO
UDF аналог GETDATE(), который можно использовать в других UDF
CREATE FUNCTION NOW() RETURNS datetime AS BEGIN RETURN (SELECT now FROM v_now) END
UDF для выделения даты из datetime
CREATE FUNCTION DATETRIM ( @date datetime ) RETURNS datetime AS BEGIN RETURN CONVERT(datetime,CONVERT(varchar,@date,1),1) END
Аналог GETDATE(), возвращающий текущую дату без временной составляющей
CREATE FUNCTION TODAY() RETURNS datetime AS BEGIN RETURN dbo.DATETRIM(dbo.NOW()) ENDПредставленные UDF можно использовать везде, где возможно использование системных функций, например в запросах, default, constraint и т.д.
Комментарии
В 2008ом нужно:
CREATE FUNCTION DBO.NOW()
RETURNS datetime2
AS
BEGIN
RETURN (SELECT SYSDATETIME())
END
SELECT DBO.NOW()
в 2008ом можно:
CREATE FUNCTION DBO.NOW()
RETURNS datetime
AS
BEGIN
RETURN (SELECT GETDATE())
END
SELECT DBO.NOW()
Я обычно пользую такой способ:
cast(FLOOR(cast(@date as float)) as datetime)
По идее, должно быть быстрее, чем конвертирования в строку или добавление разницы дат...
Использовать CONVERT и проч. преобразования - полная фигня. Использую способ, предложенный dburtsev1. Только дату для добавления дней беру не 0
create function dbo.datetrim (@date datetime)
returns datetime
as
begin
return dateadd( day, datediff(day, 0, @date), 0);
end
go