如何将日期时间插入SQL数据库表?有没有一种方法可以通过C#/ .NET中的insert命令插入此查询?
Answers:
应该插入DateTime值,就像它们是用单引号引起来的字符串一样:
'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 )
Set DateFormat MDY
,但后来您说SQL Server现在假定我的格式是YYY-MM-DD
。为什么SQL Server不希望您的格式与匹配Set DateFormat
并寻找MM-DD-YYYY
?我并不是说这是错误的(我不知道),但这似乎是违反直觉的。
Set DateFormat MDY
唯一决定SQL如何解释月份和日期的顺序,而不是确切的格式。您可以自己尝试。如果您致电Set DateFormat DMY
,2011-03-12
是12月3日。如果您致电Set DateFormat MDY
,则该日期为3月12日。
YMD
或YDM
达到相同的效果,但是我发现这些格式仅在您未经过四位数年份的情况下才有用。
应该插入DateTime值,就像它们是由单引号引起来的字符串一样,
'20201231'
但是在许多情况下,必须将它们显式转换为datetime,CAST(N'20201231' AS DATETIME)
以避免使用CONVERSION_IMPLICIT警告警告对性能造成负面影响的不良执行计划。Hier是一个示例:
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))