我正在尝试创建一个表,如下所示,
create table table1(date1 datetime,date2 datetime);首先,我尝试插入如下所示的值,
insert into table1 values('21-02-2012 6:10:00 PM','01-01-2001 12:00:00 AM');它给出的错误是,
无法将varchar转换为datetime
然后我尝试了下面的格式,作为我们的stackoverflow建议的帖子之一。
insert into table1 values(convert(datetime,'21-02-2012 6:10:00 PM',5)
,convert(datetime,'01-01-2001 12:00:00 AM',5));但我还是得到了错误的答案:
从字符串转换日期和/或时间时,
转换失败
有什么建议吗?
发布于 2013-01-02 16:51:41
SQL Server支持许多格式-请参阅MSDN Books Online on CAST and CONVERT。这些格式中的大多数都依赖于您的设置的-因此,这些设置有时可能起作用,有时则不起作用。
解决此问题的方法是使用SQL Server支持的(稍作调整的) SQL 8601日期格式-此格式适用于always,而不考虑您的SQL Server语言和日期格式设置。
SQL Server支持的ISO-8601 format有两种风格:
YYYYMMDD只表示日期(没有时间部分);这里注意:没有破折号!,这非常重要!YYYY-MM-DD is 独立于SQL Server中的日期格式设置,不会在所有情况下都能工作!或者:
日期和时间的
YYYY-MM-DDTHH:MM:SS -注意:这种格式包含破折号(但可以省略它们),并在DATETIME.的日期和时间部分之间使用固定的T作为分隔符
这对SQL Server 2000及更高版本有效。
因此,在您的特定情况下,请使用以下字符串:
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');你应该没问题(注意:你需要使用国际的24小时格式,而不是12小时的AM/PM格式)。
Alternatively:如果您使用的是SQL Server 2008 或更高版本,您也可以使用DATETIME2数据类型(而不是普通的DATETIME),并且您当前的INSERT将不会有任何问题!:-) DATETIME2在转换方面要好得多,也不那么挑剔-而且它是SQL Server 2008或更高版本的推荐日期/时间数据类型。
SELECT
CAST('02-21-2012 6:10:00 PM' AS DATETIME2), -- works just fine
CAST('01-01-2012 12:00:00 AM' AS DATETIME2) -- works just fine 不要问我为什么整个主题如此棘手和令人困惑--这就是它的方式。但是对于YYYYMMDD格式,您应该可以适用于SQL Server的任何版本以及SQL Server中的任何语言和日期格式设置。
发布于 2015-06-07 04:18:34
SQL server中的转换有时会失败,这不是因为使用了日期或时间格式,而仅仅是因为您试图存储系统无法接受的错误数据。
示例:
Create Table MyTable (MyDate);
Insert Into MyTable(MyDate) Values ('2015-02-29');
SQL服务器将抛出以下错误:
Conversion failed when converting date and/or time from character string.
此错误的原因只是因为在年份(2015)中没有这样的日期(2月29日)。
发布于 2013-01-02 17:01:08
答案很简单--5是意大利语"yy“,105是意大利语"yyyy”。因此:
SELECT convert(datetime,'21-02-12 6:10:00 PM',5)将会正常工作,但是
SELECT convert(datetime,'21-02-12 6:10:00 PM',105)将会给出错误。
同样的,
SELECT convert(datetime,'21-02-2012 6:10:00 PM',5)将给出错误,其中
SELECT convert(datetime,'21-02-2012 6:10:00 PM',105)都会起作用的。
https://stackoverflow.com/questions/14119133
复制相似问题