在Sql Server中插入日期时间的Sql查询

在Sql Server中插入日期时间的Sql查询,sql,sql-server-2008,datetime,Sql,Sql Server 2008,Datetime,我想使用下面的SQL查询将datetime值插入表(SQL Server) insert into table1(approvaldate)values(18-06-12 10:34:09 AM); 但是我得到了这个错误消息靠近“10”的语法不正确。 我用引号试过了 insert into table1(approvaldate)values('18-06-12 10:34:09 AM'); 我收到此错误消息无法将varchar转换为datetime 请帮忙! 谢谢。您将希望在SQL Ser

我想使用下面的SQL查询将
datetime
值插入表(SQL Server)

insert into table1(approvaldate)values(18-06-12 10:34:09 AM);
但是我得到了这个错误消息<代码>靠近“10”的语法不正确。

我用引号试过了

insert into table1(approvaldate)values('18-06-12 10:34:09 AM');
我收到此错误消息
无法将varchar转换为datetime

请帮忙!
谢谢。

您将希望在SQL Server中使用YYYYMMDD来确定明确的日期

insert into table1(approvaldate)values('20120618 10:34:09 AM');
如果您使用的是
dd-mm-yy-hh:mm:ss-xm
格式,则需要使用特定样式的CONVERT

insert into table1 (approvaldate)
       values (convert(datetime,'18-06-12 10:34:09 PM',5));

5
这是意大利日期的风格。嗯,不仅仅是意大利人,这也是它所处的文化。

对于字符串文字而言,一个更独立于语言的选择是国际标准格式“yyy-MM-DDThh:MM:ss”。我使用下面的SQL查询来测试该格式,它确实可以在以下所有SQL语言中工作:


如果您通过任何编程语言存储值

下面是一个C语言的例子#

要存储日期,必须先转换日期,然后再存储日期

insert table1 (foodate)
   values (FooDate.ToString("MM/dd/yyyy"));

FooDate是datetime变量,它以您的格式包含您的日期。

您需要像这样添加它

insert into table1(date1) values('12-mar-2013');

Management studio创建的脚本如下:

insert table1 (foodate) values(CAST(N'2012-06-18 10:34:09.000' AS DateTime))

不需要使用转换。只需以ISO 8601格式将其列为引用日期。
像这样:


分隔符需要是一个
/
,并且需要用一个
'
引号括起来。

我遇到了一个更一般的问题:获取不同(不一定已知)的日期时间格式并将其插入日期时间列。我用这个语句解决了这个问题,它最终变成了一个标量函数(与ODBC canonical、american、ANSI和british\franch日期样式相关-可以扩展):

插入()值(合并

(请尝试转换(datetime,谢谢.。可以。顺便说一句,不能以DD-MM-YY格式输入吗?@RichardTheKiwi,
5
表示什么?@Shee请看添加了页脚的回答我站在正确的位置-如果您使用的是
YYYYMMDD HH:MM:SS
(24小时格式-世界格式,除美国以外的任何人都会使用,而不仅仅是军方…)没有破折号-即使对于
英国
语言,它也可以工作。但是,如果使用
YYYY-MM-DD HH:MM:SS
,它会失败-在这种情况下(使用破折号),您确实需要用
T
literal分隔日期和时间。@请看一下。这是单个连接的设置,但可以在服务器范围内指定该设置。您还可以指定以控制诸如哪个字符用作基数之类的内容,日期格式将从中继承(同样,在服务器或连接级别)。只是默认值是美式英语,mdy是美式格式。但是,带有4年日期的ymd总是有效的。似乎您可以仅对日期使用
YYYYMMDD
,或者
YYYY-MM-DDThh:MM:ss
(在日期和时间部分之间使用破折号,是的,
T
)或者
YYYYMMDD HH:MM:SS
(没有破折号,没有分隔文字)是真正独立于语言的…@marc_s:谢谢你的评论。我编辑了我的答案以提及ISO 8601格式(包括你提到的T文字)。插入@TestLang(langdate)值('2012-06-18T10:34:09'))这是最好的答案。这是唯一一个适用于我的(共享)SQL server的答案。YYYY-MM DDThh:MM:ss提供了正确的mnth/日期;但是如果没有“T”(YY-MM-DD hh:MM:ss),月份和日期将被交换(有时当然会给出不可能的值),而没有连字符(YYYYDDMM hh:MM:ss)似乎也能工作,但我不能相信它,因为它取决于数据库管理员的语言设置,可能会发生变化。在SQL Server 2019上,INSERT为我工作,带有引号和4位数年份。所以“2018-06-12 10:34:09 AM”可以工作
insert into table1(date1) values('12-mar-2013');
insert table1 (foodate) values(CAST(N'2012-06-18 10:34:09.000' AS DateTime))
select * from table1 where somedate between '2000/01/01' and '2099/12/31'
insert into <tableName>(<dateTime column>) values(coalesce 
(TRY_CONVERT(datetime, <DateString, 121), TRY_CONVERT(datetime, <DateString>, 
101), TRY_CONVERT(datetime, <DateString>, 102), TRY_CONVERT(datetime, 
<DateString>, 103)))