2015-10-30 5 views
7

は、2つの単純なselect文の実行:getdate()でleft()を使用すると、別のデータ型に変更されるのはなぜですか?

SELECT GETDATE() 

SELECT LEFT(GETDATE(), 10) 

戻り値:

2015-10-30 14:19:56.697 

Oct 30 201 

を私は私に2015-10-30を与えることLEFT()を期待していたが、代わりにそれはしていません。

誰でも知っていますか?それはデータ型のスタイルで行うことですGETDATEが返されますか?

ありがとうございます!

+0

を返すようにしたい私はそれが正直に例外をスローすると予想しているでしょう。 LEFTは文字列関数なので、ここでは暗黙の変換が行われていることは明らかです。 –

+0

これは問題のポイントではないかもしれないが、ちょうど日付が必要な場合は、 'convert(date、getdate())'を使用することができます –

+0

またはSQL Server ** 2012 **以降では、あなたが必要とするものを正確に**得るために、フォーマットを選択してください.... –

答えて

9

GETDATE()は、datetimeという値を返します。 SELECT GETDATE()を実行すると、アプリケーションがdatetime値を取得し、それを表示する方法を理解しています。使用しているアプリケーションは、ISO標準フォーマットを賢明に選択しています。

あなたがLEFT(GETDATE()を行い、datetimeからいくつかの文字列値に暗黙的な変換を行う必要があるその後、データベース。このため、国際化設定を使用します。あなたが見ているものは、これらの設定に基づいています。

ストーリーのモラル:暗黙の変換を避けてください。あなたがやっていることを常に明示してください。特に、診断能力がやや劣るSQLの場合は特にそうです。したがって、あなたがしたいことに適切な書式でCONVERT()を使用してください。

+2

このhttps://msdn.microsoft.com/en-AU/library/ms187928.aspxには、国際化設定ではなく、デフォルトの変換が0であると書かれています –

+1

最初の場所にコメントしてはいけません。 –

+1

@ Nick.McDermaid。 。 。このトピックに関するAaron Bertrandの議論を紹介します:http://stackoverflow.com/questions/10398921/how-does-sql-server-decide-format-for-implicit-datetime-conversion。 –

0

GETDATE()コマンドDATETIMEを返し、あなたはDATE

SELECT CONVERT(DATE,GETDATE()); 
関連する問題