Sql server 2012 为什么此查询转换为datetime中断,而不是另一个查询?
此查询工作正常:Sql server 2012 为什么此查询转换为datetime中断,而不是另一个查询?,sql-server-2012,Sql Server 2012,此查询工作正常: select CONVERT(DATETIME, GroupAdminEffectiveDate, 101) from ExchangeSmallGroupEnrollment group by GroupAdminEffectiveDate 并返回以下内容: 1900-01-01 00:00:00.000 2012-06-30 00:00:00.000 2012-07-01 00:00:00.000 2012-07-11 00:00:00.000 2012-07-23 00
select CONVERT(DATETIME, GroupAdminEffectiveDate, 101) from ExchangeSmallGroupEnrollment
group by GroupAdminEffectiveDate
并返回以下内容:
1900-01-01 00:00:00.000
2012-06-30 00:00:00.000
2012-07-01 00:00:00.000
2012-07-11 00:00:00.000
2012-07-23 00:00:00.000
2012-07-25 00:00:00.000
2012-08-01 00:00:00.000
2012-08-14 00:00:00.000
2012-08-26 00:00:00.000
2012-09-01 00:00:00.000
2012-09-03 00:00:00.000
但是,以下查询:
select CONVERT(DATETIME, GroupAdminEffectiveDate, 101) from ExchangeSmallGroupEnrollment
我从错误中得到以下信息:
Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.
有什么想法吗?非常感谢
更新:
查询:
select distinct GroupAdminEffectiveDate from ExchangeSmallGroupEnrollment
结果:
(empty string)
06/30/2012
07/01/2012
07/11/2012
07/23/2012
07/25/2012
08/01/2012
08/14/2012
08/26/2012
09/01/2012
09/03/2012
选中此项:
select CONVERT(DATETIME, ISDATE( GroupAdminEffectiveDate), 101) from ExchangeSmallGroupEnrollment
我无法重现您的错误,因此我怀疑我们对“空字符串”的定义不同,或者您没有透露其他一些情况。同时,由于您使用的是SQL Server 2012,因此可以为此使用
TRY\u PARSE
,例如以下表达式之一:
SELECT TRY_PARSE(GroupAdminEffectiveDate AS DATETIME USING N'en-us')
FROM dbo.ExchangeSmallGroupEnrollment;
SELECT TRY_PARSE(GroupAdminEffectiveDate AS DATETIME USING N'en-us')
FROM dbo.ExchangeSmallGroupEnrollment
GROUP BY GroupAdminEffectiveDate;
SELECT TRY_PARSE(GroupAdminEffectiveDate AS DATETIME USING N'en-us')
FROM dbo.ExchangeSmallGroupEnrollment
GROUP BY TRY_PARSE(GroupAdminEffectiveDate AS DATETIME USING N'en-us');
如果确实希望1900-01-01为有效输出,则:
SELECT COALESCE(TRY_PARSE(GroupAdminEffectiveDate AS DATETIME USING N'en-us'),
'19000101')
FROM dbo.ExchangeSmallGroupEnrollment
GROUP BY TRY_PARSE(GroupAdminEffectiveDate AS DATETIME USING N'en-us');
您的数据库中可能有更多的“非日期”字段。一个可以是
”
,另一个可以是”
。当您按或不同分组时,所有结果都是”
,这意味着空值,这有利于转换。
否则,”
(空格)将失败
选中ExchangeSmallGroupEnrollment中的选择长度(GroupAdminEffectiveDate)
也许它会给你一些线索?你首先将
varchar
列转换为Datetime
,然后转换
Declare @testvarchar VARCHAR(15) = '08/27/2012'
select CONVERT(datetime, Cast(@testvarchar as datetime), 101)
这将解决您的转换错误GroupAdminEffectiveDate的类型是什么?GroupAdminEffectiveDate的数据类型是什么?为什么不是约会或约会时间?这是一个VARCHAR。。。不幸的是,我无法控制的系统将其存储为VARCHAR。请将您的视图定义添加到问题中。如果您可以为两个查询添加执行计划,这也会很有帮助。问题很可能是您得到了不同的执行计划,并且表中的日期值无效,并且在失败的查询中筛选出错误的日期行之前执行转换。这应该做什么?它只是将0或1转换为日期。。。。1900-01-01 00:00:00.000或1900-01-02 00:00:00.000仍然不确定为什么查询不起作用,但这将满足我的需要