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