set dateformat dmy
select isdate('31/1/2012')
Windows コントロール パネルで数値、日付、時刻の形式を変更することで、SQL でDATEFORMAT DMYを設定する必要がなくなると思いましたか?
だから私は変更を加え、setステートメントを省略しましたが、isdateはまだ失敗しています.何が欠けていますか?
set dateformat dmy
select isdate('31/1/2012')
Windows コントロール パネルで数値、日付、時刻の形式を変更することで、SQL でDATEFORMAT DMYを設定する必要がなくなると思いましたか?
だから私は変更を加え、setステートメントを省略しましたが、isdateはまだ失敗しています.何が欠けていますか?
TRY_PARSE
SQL Server 2012では、カルチャを使用および指定できます(例en-gb
)。あなたはTRY_PARSE
ここについて読むことができます:
http://msdn.microsoft.com/en-us/library/hh213126(v=sql.110).aspx
もちろん、そもそも明確な日付形式を使用し、文化のナンセンスをすべて回避する方がはるかに安全です。アプリケーションにデータベースが表示される前にユーザーエントリを変換させることも、文字列入力を完全に回避することもできます。カレンダーコントロールまたはドロップダウンを使用するYYYYMMDD
と、地域、言語、日付形式の設定を気にすることなく、安全な形式を指定できます。すべてのユーザーが入力していることを信頼することを心に留めてd/m/y
くださいm/d/y
。
通常、SQL Server はSystem
ユーザー アカウントまたはで実行されますNETWORKSERVICE
。これらは、インストール時に地域設定を取得します。
したがって、SQL Server の地域設定を変更するには、SQL Server サービスで使用されるユーザー アカウントの地域設定を変更する必要があります。
この記事で説明されている手順に従って、これを変更できます。
(私はこれをテストしたことはありませんが、理論的には動作するはずです。)
これを試して。
SELECT CONVERT(VARCHAR(10),GetDate(),111)
これ111
が日付形式です。要件に合わせて変更できます。
SQLは、サーバーの設定に関係なく、データベースの日時を処理します。日時のような形式の文字列があり、それを変換したい場合は、CAST()またはCONVERT()を使用してこれを行うことができます。しかし、あなたは常にしなければなりません。
http://msdn.microsoft.com/en-us/library/ms187928.aspxを参照してください
良い情報はhttp://karaszi.com/the-ultimate-guide-to-the-datetime-datatypesでもあります
あなたの場合
select isdate('31/1/2012')
動作するはずです。では、実行するとどのようなエラーが発生しますか?
編集:これを試しました:
SELECT DATEPART(m,CAST('1/31/2012' AS datetime))
と
SELECT DATEPART(m,CONVERT(datetime, '31/1/2012', 103))
私が期待したように常に私に月として1を与えます。