我该如何将日期时间插入SQL数据库表中? 在C# / .NET中是否有通过插入命令插入此查询的方法?
我该如何将日期时间插入SQL数据库表中? 在C# / .NET中是否有通过插入命令插入此查询的方法?
将时间日期值插入数据库时,应该像插入字符串一样,用单引号括起来:
'20100301'
SQL Server支持多种可接受的日期格式,大多数开发库都应该提供一系列类或函数来正确插入datetime值。但是,如果您正在手动执行此操作,则重要的是使用DateFormat
区分日期格式并使用通用格式。
Set DateFormat MDY --indicates the general format is Month Day Year
Insert Table( DateTImeCol )
Values( '2011-03-12' )
通过设置日期格式,SQL Server 现在假定我的格式为 YYYY-MM-DD
而不是 YYYY-DD-MM
。
SQL Server 还识别一种通用格式,始终以相同的方式解释:YYYYMMDD
,例如:20110312
。
如果您想使用 T-SQL 插入当前日期和时间,则建议使用关键字 CURRENT_TIMESTAMP
。例如:
Insert Table( DateTimeCol )
Values( CURRENT_TIMESTAMP )
MDY
,但之后又说SQL Server现在假定我的格式为YYY-MM-DD
。为什么SQL Server不期望您的格式与“Set DateFormat”匹配并寻找MM-DD-YYYY
呢?我不是说这是错的(我不知道),但它似乎不符合直觉。 - JerryOLSet DateFormat MDY
只决定了 SQL 如何解释月份和日期的顺序,而不是确切的格式。你可以自行尝试。如果你调用 Set DateFormat DMY
,则 2011-03-12
代表的是 12月3日。如果你调用 Set DateFormat MDY
,那么同一天就是 3月12日。 - ThomasYMD
或 YDM
并实现相同的效果,但我发现这些格式仅在您未传递四位数年份时才有用。 - Thomas如果你需要实际时间,GETDATE()
是你要寻找的函数。
日期时间值应该被插入为字符串,用单引号括起来
'20201231'
但是在许多情况下,它们需要被显式地转换为datetime CAST(N'20201231' AS DATETIME)
,以避免出现CONVERSION_IMPLICIT警告的不良执行计划,从而对性能产生负面影响。以下是一个例子:
CREATE TABLE dbo.T(D DATETIME)
--wrong way
INSERT INTO dbo.T (D) VALUES ('20201231'), ('20201231')
--better way
INSERT INTO dbo.T (D) VALUES (CAST(N'20201231' AS DATETIME)), (CAST(N'20201231' AS DATETIME))
myConn.Execute "INSERT INTO DayTr (dtID, DTSuID, DTDaTi, DTGrKg) VALUES (" & Val(txtTrNo) & "," & Val(txtCID) & ", '" & Format(txtTrDate, "yyyy-mm-dd") & "' ," & Val(Format(txtGross, "######0.00")) & ")"
使用VB完成,所有文本类型变量。