如何将日期时间插入到SQL数据库表?


Answers:


111

应该插入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 )

1
那是对的吗?您Set DateFormat MDY,但后来您说SQL Server现在假定我的格式是YYY-MM-DD。为什么SQL Server不希望您的格式与匹配Set DateFormat并寻找MM-DD-YYYY?我并不是说这是错误的(我不知道),但这似乎是违反直觉的。
JerryOL 2011年

3
@JerryOL-Set DateFormat MDY唯一决定SQL如何解释月份和日期的顺序,而不是确切的格式。您可以自己尝试。如果您致电Set DateFormat DMY2011-03-12是12月3日。如果您致电Set DateFormat MDY,则该日期为3月12日。
托马斯(Thomas)

2
@JerryOL-顺便说一句,我也可以使用YMDYDM达到相同的效果,但是我发现这些格式仅在您未经过四位数年份的情况下才有用。
托马斯(Thomas)

14

您将需要在表中有一个datetime列。然后,您可以执行以下插入操作以插入当前日期:

INSERT INTO MyTable (MyDate) Values (GetDate())

如果不是今天的日期,那么您应该可以使用字符串并指定日期格式

INSERT INTO MyTable (MyDate) Values (Convert(DateTime,'19820626',112)) --6/26/1982

您也不总是需要转换字符串,通常您可以执行以下操作:

INSERT INTO MyTable (MyDate) Values ('06/26/1982') 

SQL Server会为您解决。


8

如果您真正想到的时间GETDATE()就是您想要的功能


0

应该插入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))

没有警告


-1
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中完成。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.