2016-10-27 7 views
1

convert(datetime、getdate()、101)は、ストアドプロシージャと単純なselectコマンドで実行されているときに異なる結果をもたらすのはなぜですか?

select CONVERT(datetime, getdate(),101) 

のコマンドを実行しながら、理由がわからないが、所望の結果である、'2016-10-27 15:53:12.743'を取得します。

しかし

if @CodeFilter2 is not null 
select @CodeFilter2=CONVERT(datetime,GETDATE(),101) 

'Oct 27 2016 3:55PM'を生み出すように同じコマンドがストアドプロシージャで実行されたとき。

なぜこれが起こっているのか理解してください。

ありがとうございます!

+1

どのdbmsを使用していますか? (そのコードはANSI SQLにはありません) – jarlh

+1

このパラメータをどのように渡していますか?@ CodeFilter2' –

+2

**参照**は**実際の値ではありません**しかし、日時値の**文字列表現**です使用されるフォーマットは、コンテキスト、設定、システムの文化、サーバーの言語に拘束されます。そのため、常に文化固有のdatetime形式や文字列ベースのdatetimeの任意のストレージを避けるようにしなければならない理由は... – Shnugo

答えて

2

datetimedatetimeに変換していますか? convertで使用されているフォーマットが使用されることを期待していますか?それはあなたがやっている変換の意味がないので無視されます。 datetimeをvarcharに変換する場合は、convert(varchar(max), getDate(), 101)のようなものを使用する必要があります。正しい出力が得られます10/27/2016 - どちらのサンプルが正しいと思われるのかわかりません。デフォルトの変換(ロケールやその他のコンテキストに基づいて、非常に可変である)が(最初のケースでは)あなたの望む結果になるため、そのように動作します。

特定のフォーマットに依存する必要がある場合は、明示的な書式設定を使用する必要があります。または、アプリケーションでDBサーバーの代わりに処理させることもできます。あなたが望むものと思われるODBC標準形式の適切な形式は121です。varcharまたはnvarcharに変換していることを確認してください。datetimeではありません。

+0

の問題を解決しました。なぜそれが起こっているのか、パラメータ "@ CodeFilter2"のデータ型は、datetime.thatを解決するnvarcharとして定義されています。 –

関連する問題