0

このクエリは正常に機能します。

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
4

4 に答える 4

1

エラーを再現できないので、「空の文字列」の定義が異なるか、他に明らかにされていないことが起こっているのではないかと思います。それまでの間、SQL Server 2012を使用TRY_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');
于 2012-08-15T16:15:59.763 に答える
0

データベースに「日付以外」のフィールドがさらにある可能性があります。""1 つは、もう1 つは可能性があり" "ます。グループ化または個別にすると、すべて""がNULLを意味するものになり、変換するのに適しています。" "それ以外の場合は(スペース)で失敗します。

checkselect length( GroupAdminEffectiveDate ) from ExchangeSmallGroupEnrollment 多分それはあなたにいくつかの手がかりを与えるでしょうか?

于 2012-08-15T22:34:20.147 に答える
0

varchar最初に列をCASTしDatetime、次に CONVERT します。

Declare @testvarchar VARCHAR(15) = '08/27/2012'
select CONVERT(datetime, Cast(@testvarchar as datetime), 101)

それはあなたの変換エラーを解決するはずです

于 2012-12-03T18:42:44.850 に答える
-2

これをチェックして:

select CONVERT(DATETIME, ISDATE( GroupAdminEffectiveDate), 101) from ExchangeSmallGroupEnrollment
于 2012-08-15T15:34:30.930 に答える