Microsoft SQL Server
Transact-SQL

UDF для работы с круглыми датами

Опубликовано: 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()

  • 18 марта 2009, 17:23 Knyazev Alexey

    в 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



Необходимо войти на сайт, чтобы оставлять комментарии

Раздел FAQ: Microsoft SQL Server / Transact-SQL / UDF для работы с круглыми датами