1

varchar 形式の日付を持つ列があるビューがあり、dd/MM/yyyy order by を使用しようとするとエラーが発生します

メッセージ 241、レベル 16、状態 1、行 2 文字列から日付や時刻を変換するときに変換に失敗しました。

クエリは

select * from test1.dbo.abcd order by CONVERT(date,ddate,103)

0 を返す一部の日付は13/01/2010

18/12/2009
20/10/2009
21/06/2010
19/10/2009
18/11/2010
29/10/2009
29/10/2009
18/03/2010
15/03/2010
15/03/2010
15/03/2010
15/04/2010
15/04/2010
15/04/2010
15/04/2010
30/03/2010
14/05/2010
14/01/2010
23/10/2009
20/10/2009
27/10/2009
27/10/2009
20/07/2009
20/04/2010
13/08/2010
30/06/2011
23/07/2010
27/08/2010
24/09/2010

0 を返す理由と、それをソートする方法を誰か教えてもらえますか?

4

4 に答える 4

4

set dateformat dmyそれを整理するかもしれません

于 2012-07-11T12:26:11.647 に答える
2

ISDATE()問題は、関数ではなく関数の使用にあると思いCONVERT()ます。

これを試すことができます:

ISDATE( CONVERT(CHAR(10), CONVERT(date, ddate, 103) ) )

しかし、このチェックを行う理由が見つかりませんISDATE()DATEFORMAT上記は設定(およびおそらく私が気付いていない他の設定)に依存し 、CONVERT()関数が互換性のない日付を検出すると、エラーで失敗します。


日付をDATEdatatype に変換できない場合、おそらく実行できる最善のハックは、これを確認することです。

ISDATE(SUBSTRING(ddate, 7, 4) + SUBSTRING(ddate, 4, 2) + SUBSTRING(ddate, 1, 2))
于 2012-07-11T12:45:30.370 に答える
0

13/O1/2010 は、デフォルトの米国の日付形式では 13 番目の月の最初の日として変換されるため、有効な日付ではありません。

于 2016-09-07T18:39:54.740 に答える