【SQL Server】使用 Stored Procedure 获取当前日期(一)
【摘要】 设置服务器恒定时间,且获取当前服务器的时间。
[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)