2

テーブルがあり、特定の列に日付のみが含まれていることを確認する必要があります。日付形式に従っていないレコードの数を数えようとしています。タイプ「日付」として定義していないフィールドをチェックすると、クエリは機能します。ただし、日付として定義したフィールドをチェックすると、そうではありません。

クエリ:

SELECT 
    count(case when ISDATE(Date_Field) = 0 then 1 end) as 'Date_Error'
FROM [table]

列の定義:

Date_Field(date, null)

サンプルデータ:'2010-06-27'

エラーメッセージ:

isdate 関数の引数 1 の引数データ型 date は無効です。

日付として定義したフィールドに対してこのクエリが機能しない理由についての洞察はありますか?

ありがとう!

4

4 に答える 4

6

日付型で列を定義した場合、それは日付です。限目。このチェックはまったく不要です。

あなたがしたいことはNULL、列の値を探すことです:

SELECT SUM(case when Date_Field IS NULL THEN 1 ELSE 0 end) as 'Date_Error' FROM [table]

また、Sql Server で DateTime や DateTime2 などの Date フィールドがどのように機能するかについて、さらに誤解を感じています。これらのフィールドの値は、どの形式の文字列としても保存されません。これらはバイナリ/数値形式で保存され、クエリ ツールでは便宜上文字列としてのみ表示されます。そして、それは良いことです。特定の形式の日付が必要な場合はCONVERT()、クエリで関数を使用するか、クライアント アプリケーションに形式を処理させます。

于 2013-11-05T19:05:37.760 に答える
4

ISDATE()STRING のようなパラメーター (varchar、nvarachar、char など) に対してのみ評価します。

確かに、ISDATE()のパラメーターは cast() 関数でラップする必要があります。

すなわち

Select isdate(cast(parameter as nvarchar))

MULL 値であっても、1 または 0 を返す必要があります。

お役に立てれば。

于 2013-11-19T18:54:24.517 に答える
1

IsDate は、文字列または文字列を生成する式を引数として取ります

于 2013-11-05T19:05:47.927 に答える
0

問題は、このメソッド ISDATE() が "time" 型内の型 datetime および smalldatetime の引数のみを受け入れるため、日付型を使用している場合は機能しないことです。

また、そのフィールドのタイプとして日付を使用する場合、他のタイプのフィールドは許可されないため、そこで情報を確認する必要はありません。

列の null 値のみをチェックする必要があります。それだけです。

于 2013-11-05T19:11:10.710 に答える