当前位置: 首页 > 知识库问答 >
问题:

不带参数的内联表值函数

景书
2023-03-14

我对Azure平台还很陌生,还在学习SQL语言。我有一个关于在Azure平台上创建用户定义的内联表值函数(不需要参数)的问题。自从在我的SQL Server Management Studio上访问Azure平台以来,每当我使用系统内置函数GetDate()创建日志文件时,它都以UTC时区显示日期和时间,但我希望我的当前时区(复活节时区)比UTC晚4个小时。因此,我想知道是否有人可以指导我如何创建一个不需要任何参数的内联表值函数,并能够通过简单地运行以下代码将其用作GetDate()函数:

            SELECT GetDate() 

这是我的尝试,我知道这是不对的,但至少我试过了。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[Azure_EST_GetDate()] (
)

RETURNS TABLE 
AS
RETURN 
(

    SELECT DATEADD(hh,-4,GETDATE()) AS 'handate'
)
GO

提前感谢,

共有1个答案

佴波鸿
2023-03-14

考虑使用DATETIMEOFFSETAT TIMEZONE,而不是 DATETIMEOFFSET结果转换为另一种类型(在本例中为 datetime2)。

我不认为你的意图是在函数名中包含括号,所以我在这个例子中去掉了它。

CREATE FUNCTION [dbo].[Azure_EST_GetDate] (
)

RETURNS TABLE 
AS
RETURN 
(
    SELECT CAST(SYSDATETIMEOFFSET() AT TIME ZONE 'Eastern Standard Time' AS datetime2(3)) AS handate
);
GO

编辑

只要可以指定表,表值函数通常就可以用在查询中。例如:

SELECT handate FROM dbo.Azure_EST_GetDate();

当返回多个列或行时,表值函数是合适的。您也可以根据需要使用标量函数,因为返回的是标量(单个)值。下面是等效的标量函数。

CREATE FUNCTION [dbo].[Azure_EST_GetDate_Scalar] ()
RETURNS datetime2(3)
AS
BEGIN
    RETURN CAST(SYSDATETIMEOFFSET() AT TIME ZONE 'Eastern Standard Time' AS datetime2(3));
END;
GO

可以使用此标量函数代替AzureSQL数据库中的GETDATE()返回本地时间:

SELECT dbo.Azure_EST_GetDate_Scalar() AS handate;
 类似资料:
  • 在 C++ 中,空参数表可以用 void 指定或括号中不放任何东西。下列声明: void print(); 指定函数 print 不取任何参数,也不返回任何值。图 3.18 演示了 C++ 声明和使用带空参数表的函数的方法。 编程技巧 3.11 虽然函数先定义后使用时可以省略函数原型,最好也提供函数原型。提供函数原型可以避免代码使用时受到函数定义顺序的限制。(这个顺序可能随程序的演变而改变)。 /

  • 我有以下代码: 我不希望字段ui有一个getter,但是kotlin在默认情况下会生成它,因为它是构造函数中定义的val。 在properties and fields文档中,我发现我可以用以下代码生成一个私有getter 但我在构造函数定义中找不到这样做的方法

  • 函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码。CPU 在执行主调函数代码时如果遇到了被调函数,主调函数就会暂停,CPU 转而执行被调函数的代码;被调函数执行完毕后再返回到主调函数,主调函数根据刚才的状态继续往下执行。 一个 C/ C++ 程序的执行过程可以认为是多个函数之间的相互调用过程,它们形成了一个或简单或复杂的调用链条,这个链条的起点是 main(),终点也是 ma

  • 从软件工程角度看,将程序实现为一组函数很有好处,但函数调用却会增加执行时的开销。 C++ 提供了内联函数 (inline function) 可以减少函数调用的开销,特别是对于小函数。函数定义中函数返回类型前面的限定符inline指示编译器将函数代码复制到程序中以避免函数调用。其代价是会产生函数代码的多个副本并分别插入到程序中每一个调用该函数的位置上(从而使程序更大),而不是只有一个函数副本(每次

  • FAQs in section [9]: [9.1] 内联函数有什么用? [9.2] 有没有个简单的例子说明什么是顺序集成(procedure integration)? [9.3] 内联函数能改善性能么? [9.4] 内联函数如何在安全和速度上取得折衷? [9.5] 为什么我应该用内联函数?而不是原来清晰的 #define 宏? [9.6] 如何告诉编译器使非成员函数成为内联函数? [9.7]

  • C++ 类 & 对象 C++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。 对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。 如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 inline,在调用函数之前需要对函数进行定义。如果已定义的函数多