@kmatyaszek,虽然常用,但不能保证 SQL 服务器明确解析“yyyy-mm-dd HH:mm:ss”日期格式。如果您必须从连接字符串创建 SQL(在这种情况下不是必要的,正如 René 所示),那么您应该使用 ISO8601 格式,它是相同的,但中间有一个 T:“yyyy-mm-ddTHH:mm:ss ”。
http://msdn.microsoft.com/en-us/library/ms190977%28v=sql.90%29.aspx
“使用 ISO 8601 格式的优势在于它是一个国际标准。此外,使用此格式指定的日期时间值是明确的。此外,此格式不受 SET DATEFORMAT 或 SET LANGUAGE 设置的影响。”
为了演示为什么,试试这个可重新运行的 Sql 脚本。
if object_id('tempdb..#Foo') is not null drop table #Foo;
create table #Foo(id int, d datetime)
-- Intend dates to be 12th Jan.
set dateformat ymd
insert into #Foo(id, d) values (1, '2012-01-12 01:23:45') -- ok
insert into #Foo(id, d) values (2, '2012-01-12T01:23:45') -- ok
set dateformat ydm
insert into #Foo(id, d) values (3, '2012-01-12 01:23:45') -- wrong!
insert into #Foo(id, d) values (4, '2012-01-12T01:23:45') -- ok
select * from #Foo order by id
if object_id('tempdb..#Foo') is not null drop table #Foo;