質問

SQL Server 2008 R2をデータストアとして使用しています。

これまでテストマシンでは、英語版のソフトウェアを持っていて、DateTimeフィールドを次のようにフォーマットするクエリを作成しました。

fromDate.ToString("MM/dd/yyyy");

今、私はイタリア語の別のサーバーにデータベースを展開しました。コードの形式を変更します

fromDate.ToString("dd/MM/yyyy");

中立形式でクエリを作成する方法はありますか?

ありがとう!

編集:

私はコードスミスでネッティアを使用していることに言及するのを忘れていました。これが完全なサンプルです

AppointmentQuery aq = new AppointmentQuery(true, true);
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate.ToString("MM/dd/yyyy"));
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate.ToString("MM/dd/yyyy"));
AppointmentService aSvc = new AppointmentService();
TList<Appointment> appointmentsList = aSvc.Find(aq);
役に立ちましたか?

解決

ISO 8601 データ要素と交換形式 - 情報交換 - 日付と時間の表現 yyyy-mm-ddとyyyymmddの両方を許可します。 SQL ServerはISO仕様を認識します。

標準では、完全なカレンダーの日付表現のためにyyyy-mm-ddとyyymmdd形式の両方を許可しますが、日[DD]が省略されている場合、yyyy-mm形式のみが許可されます。 yyyymmの形式の日付を許可することにより、この標準は、切り捨てられた表現yymmddとの混乱を回避します(まだよく使用されています)。

私はyyyymmdd形式を好むが、それは私がそれを最初に知っていただけだったからだと思う。

他のヒント

クエリを実行するために使用しているコードを共有する必要がありますが、String Concatsを使用してSQLクエリを動的に構築してクエリと引数を作成していると思います。パラメーター化されたクエリを使用して、データを日付オブジェクトとして渡すことができ、文字列を変換する必要はありません。

たとえば、あなたのクエリがこのようなものになる可能性がある場合

DateTime fromDate = DateTime.Now;

SqlCommand cmd = new SqlCommand(
  "select * from Orders where fromDT = @fromDate", con);

cmd.Parameters.AddWithValue("@fromDate", fromDate);

...

良い副作用として、これはあなたのリスクを減らします SQLインジェクション. アップデート: 質問のコンテキストを大幅に変更する編集後、.nettiersプロジェクトの知識がゼロであることを認めなければなりません。しかし、好奇心から、次のように日付インスタンスを直接合格してみましたか?

AppointmentQuery aq = new AppointmentQuery(true, true); 
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate); 
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate); 
AppointmentService aSvc = new AppointmentService(); 
TList<Appointment> appointmentsList = aSvc.Find(aq); 

個人的には、私はいつも使用しています yyyy-MM-dd. 。これにより、文字列としてソート可能になります。

ただし、日付は日付です。日付を文字列に変更する必要はありません。 .netで、ユーザー DateTime.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top