1

日付と文字列パラメータを受け取るストアドプロシージャがあります。入ってくるデータはデータベースのフォームのように見えyyyy-MM-ddます。日付はフォームに保存されます2012-02-26 06:00:00.000(時刻が付加されます。SQLを実行すると、比較が見つからないため、常に何も返されません。

'select t_typday from ' + @dbName+ '.dbo.Calendar ' +
' where T_date LIKE ''' + @dateFilter + '%''';
4

2 に答える 2

1

明確な日付形式を使用する必要があります。これは、いくつかの可能な日付として解釈できないものです。

オプションについては、これこれを参照してください。

于 2012-04-23T14:46:46.903 に答える
1

次を使用して、テーブル内の日付をyyyy-mm-dd hh:mi:ss.mmm日付形式に変換してから、その形式の文字列パラメータと比較する必要がありLIKEます。

最小限の変更で既存のコードを修正するには、に変更T_dateしてCONVERT(VARCHAR(50),T_date,121)、以下を生成します。

'select t_typday from ' + @dbName+ '.dbo.Calendar ' + 
' where CONVERT(VARCHAR(50),T_date,121) LIKE ''' + @dateFilter + '%'''; 

変換を実行しない場合は、ローカル形式の文字列@@LANGUAGE(設定に基づく)を比較します。たとえば、を含むApr 12 2012 12:00AM文字列と比較します。これが、比較が機能しない理由です。@dateFilter2012-04-12

もちろんDATE、いくつかのコメントがすでに述べているように、タイプのパラメータをストアドプロシージャに渡す方がはるかに優れたソリューションになります。これにより、次のような単純な式を使用して、日付T_dateと渡されたDATE値を比較できます。@dateFilter

CONVERT(DATE,T_date)=@dateFilter
于 2012-04-23T14:48:12.117 に答える