【发布时间】:2011-07-14 07:58:06
【问题描述】:
如何将日期时间插入 SQL 数据库表? 有没有办法通过 C#/.NET 中的插入命令插入这个查询?
【问题讨论】:
-
在此讨论中解决了 SQL 服务器中的日期时间stackoverflow.com/a/12957690/2120484
标签: .net sql sql-server sql-server-2005 c#-3.0
如何将日期时间插入 SQL 数据库表? 有没有办法通过 C#/.NET 中的插入命令插入这个查询?
【问题讨论】:
标签: .net sql sql-server sql-server-2005 c#-3.0
DateTime 值应该像被单引号括起来的字符串一样插入:
'20100301'
SQL Server 允许许多可接受的日期格式,并且大多数开发库都应该提供一系列类或函数来正确插入日期时间值。但是,如果您是手动操作,请务必使用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 列。然后你可以像下面这样插入来插入当前日期:
INSERT INTO MyTable (MyDate) Values (GetDate())
如果不是今天的日期,那么您应该可以使用字符串和specify the date format:
INSERT INTO MyTable (MyDate) Values (Convert(DateTime,'19820626',112)) --6/26/1982
你并不总是需要转换字符串,通常你可以这样做:
INSERT INTO MyTable (MyDate) Values ('06/26/1982')
SQL Server 会帮你解决的。
【讨论】:
如果您考虑到实际时间,GETDATE() 将是您正在寻找的功能
【讨论】:
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))
【讨论】:
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 中使用所有文本类型变量完成。
【讨论】: