12

GetDate()是否可以欺骗 SQL Server 在不实际更改机器日期的情况下返回不同的日期?
这会很棒,因为我们有一个包含旧数据的数据库,并且我正在尝试测试一些使用 getdate() 的查询。
我可以更改我的机器日期,但这会给其他应用程序带来一些其他问题......有
什么提示吗?
谢谢!

4

5 回答 5

14

根据getdate() 的文档

此值源自运行 SQL Server 实例的计算机的操作系统。

由于它是从操作系统派生的,我认为您不能单独更改它。

于 2010-04-07T14:04:05.810 回答
5

您始终可以包装GetDate()自定义函数并在任何地方使用它,尽管它不是最佳解决方案。

于 2010-04-07T14:03:34.720 回答
1

不,除了这样的事情,你无能为力:

SELECT GETDATE()-7  --get date time 7 days ago
于 2010-04-07T14:04:17.580 回答
0
SELECT DATEADD(dd, -7, GETDATE())
于 2012-09-10T19:19:51.180 回答
0

一种方法是有一个可选的假时钟。

创建一个单行表(我通常称之为 dbo.System 因为我通常有许多全局参数值),其中有一列我称之为 CurrentMoment,它是 datetime2 NULL(因此该值可以是 NULL 或 datetime)。

创建一个函数来替换 GetDate()

CREATE OR ALTER FUNCTION [dbo].GetDate
    RETURNS datetime2
AS
    BEGIN
        RETURN ISNULL((SELECT CurrentMoment FROM dbo.System), SYSDATETIME());
    END
GO
 -- Yes the above returns a more accurate clock than GETDATE().

将所有对 GETDATE() 的引用替换为 dbo.GetDate() - 这确实需要对现有脚本进行少量更改。

将 System.CurrentMoment 设置为 NULL 时,所有工作都正常、实时。但是设置一个值并且你有一个假时钟,你必须在测试/演示进行时更新它。

如果您担心性能,您可以修改该函数,使其返回 SYSDATETIME() 或首选的假日期时间。但是我还没有发现值得担心的性能问题。

或者,您可以在 System 中有一个列,它是当前时间的偏移量,并在调用函数时从 SYSDATETIME() 中减去它。这样,值将在函数调用之间移动。

于 2021-11-26T14:31:41.543 回答