将DateTime插入SQL脚本

时间:2020-04-03 10:11:15

标签: c# sql sql-server

我正在编写一个SQL脚本以在数据库中注册组件。其中之一要求DateTime(从去年开始)作为值之一插入表中,如下所示:

INSERT INTO ComponentTable (ComponentId, Setting, [Value]) VALUES ('id', 'StartDate', ... )

我以前用来插入值的C#是DateTime.Today.AddDays(-365).ToString()(在切换到数据库之前)。

是否可以将相同的内容添加到上面的SQL脚本中?

谢谢

2 个答案:

答案 0 :(得分:1)

本文显示并说明了您需要的SQL Server日期/时间功能:

Date and Time Data Types and Functions (Transact-SQL)

对于您而言,这可能有效:

INSERT INTO ComponentTable (ComponentId, Setting, [Value]) VALUES ('id', 'StartDate', DATEADD(DAY, -365, GETDATE()))

请注意以下几点:

  1. 以前,您是在客户端应用程序(C#)中确定日期/时间值的,因此使用客户端计算机的日期/时间值。使用SQL Server功能时,将使用运行SQL Server实例的计算机的系统日期/时间来代替。 (我认为这是一个优势。)
  2. 建议以非特定于区域的方式将日期/时间值存储在数据库中。因此,如果您在不同时区有多个客户端,那么包括时区可能很重要。我认为,将UTC日期/时间值存储在数据库中(通过使用GETUTCDATE()而不是GETDATE(),并将C#客户端应用中检索到的值转换为本地时间(使用DateTime.ToLocalTime()函数)可能会有用。

答案 1 :(得分:0)

我尝试了以下操作,这为您提供365天之前的日期;这就是你想要的吗?

CREATE TABLE test (ID serial PRIMARY KEY, startdate DATE);
INSERT INTO test (startdate)VALUES (date(now()) - integer '365');

查看文档:{​​{3}}

如果您想要精确的一年(照顾(年),则可能需要使用“提取”来获得年份,然后减去一年,然后重建日期。