在C#中格式化SQL友好日期/时间

Mon*_*per 3 c# sql sql-server-2008

我正在为我的应用程序构建一些测试场景.为了做到这一点,我有一些代码生成一些SQL来帮助我正确测试.此处显示了生成的SQL示例:

INSERT INTO MyTable
(
 [ID],
 [Name],
 [CheckInDate],
 [CheckOutDate]
)
VALUES
(
  1,
  'A title',
  'Sat, 17 Dec 2011 14:33:12 GMT',
  'Sat, 17 Dec 2011 15:13:12 GMT'
)
Run Code Online (Sandbox Code Playgroud)

当我尝试执行此SQL时,收到以下内容: 从字符串转换日期和/或时间时转换失败.

如何格式化日期/时间字符串以便SQL Server 2008接受它们?我真的需要我的C#代码来生成SQL(包括日期/时间项)来正确创建我的测试.

谢谢!

mar*_*c_s 9

解决此问题的方法是使用SQL Server支持的ISO-8601日期格式 - 此格式始终有效 - 无论您的SQL Server语言和日期格式设置如何.

ISO-8601格式由SQL Server支持有两种形式:

  • YYYYMMDD只为日期(没有时间部分) - 请注意:没有破折号!,这非常重要!YYYY-MM-DD不是独立于你的SQL Server的日期格式设置,将适用于所有情况!

要么:

  • YYYY-MM-DDTHH:MM:SS对于日期和时间 - 请注意:此格式破折号.

这适用于SQL Server 2000及更高版本.

如果您使用SQL Server 2008和DATE数据类型(仅DATE- DATETIME!),那么您确实也可以使用该YYYY-MM-DD格式,并且它也适用于SQL Server中的任何设置.

不要问我为什么整个主题如此棘手而且有些混乱 - 这就是它的方式.但是使用这种YYYYMMDD格式,您可以适用于任何版本的SQL Server以及SQL Server中的任何语言和日期格式设置.