【SQL Server】使用 Function 函数获取当前日期(二)

举报
bluetata 发表于 2023/07/31 20:37:20 2023/07/31
【摘要】 设置服务器恒定时间,且获取当前服务器的时间。 [SQL Server]如果直接利用GETDATE()获取服务器当前时间,所获取的时间为server所在的本地的时间,这样如果数据中心在其他地域国家,或者不同server同步数据,直接利用GETDATE()便会出现问题。解决方案,在数据库创建一个存储当前business date的表:SysCurrentDate,之后在从该table中获取被设定好的当

设置服务器恒定时间,且获取当前服务器的时间。
[SQL Server]如果直接利用GETDATE()获取服务器当前时间,所获取的时间为server所在的本地的时间,这样如果数据中心在其他地域国家,或者不同server同步数据,直接利用GETDATE()便会出现问题。解决方案,在数据库创建一个存储当前business date的表:SysCurrentDate,之后在从该table中获取被设定好的当前Server date

(1): 存储business date的拟创表语句

CREATE TABLE [dbo].[SysCurrentDate](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[CurrentDate] [datetime] NOT NULL,
	[CurrentTime] [datetime] NULL,
	[CreatedBy] [nvarchar](30) NOT NULL,
	[CreatedDate] [datetime] NOT NULL,
	[UpdatedBy] [nvarchar](30) NULL,
	[UpdatedDate] [datetime] NULL,
 CONSTRAINT [PK_SysCurrentDate] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

(2): 利用stored procedure获取该当前业务日期(注:如果该表中有数据则返回该当前date,如果没有数据则直接返回DB Server所在的当地date)
拟create Function语句:

-- =============================================
-- Author: bluetata
-- Create date: 07/13/2023
-- Description: getCurrentDate
-- =============================================
CREATE FUNCTION [dbo].[udf_GetCurrentDate](    
    -- Add the parameters for the function here
 
)
RETURNS VARCHAR(500)
AS
     BEGIN
         DECLARE @CurrentDate DATETIME= NULL;
         DECLARE @CurrentTime DATETIME= NULL;
         DECLARE @ReturnDate DATETIME= NULL;
         SELECT TOP 1 @CurrentDate = CurrentDate,
                      @CurrentTime = CurrentTime
         FROM SysCurrentDate;
         IF(@CurrentDate IS NOT NULL)
             BEGIN
                 IF(@CurrentTime IS NULL)
                     BEGIN
                         SET @ReturnDate = CONVERT(VARCHAR(20), CONVERT(DATE, @CurrentDate))+' '+CONVERT(VARCHAR(10), GETDATE(), 108);
                 END;
                     ELSE
                     BEGIN
                         SET @ReturnDate = CONVERT(VARCHAR(20), CONVERT(DATE, @CurrentDate))+' '+CONVERT(VARCHAR(10), @CurrentTime, 108);
                 END;
         END;
             ELSE
             BEGIN
                 SET @ReturnDate = GETDATE();
         END;
         RETURN @ReturnDate;
     END;
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。