【SQL Server】使用 Stored Procedure 获取当前日期(一)

举报
bluetata 发表于 2023/07/31 20:33:01 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 sp语句:

-- =====================================================================================
-- Author: bluetata
-- ALTER date: 13-Oct-2017
-- Description:	
-- Get the current date from the table SysCurrentDate
-- If no item in the table, return GETDATE()
-- else
--		if CurrentTime is not null
--			return static date and time from current date
--		else
--			return static date from CurrentDate and running time from GETDATE()			
-- =====================================================================================
CREATE PROCEDURE [dbo].[sys_sp_GetCurrentDate] 
 
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
 
 
	SELECT @ReturnDate AS CurrentDate
 
END
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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