4

私の簡単な説明は、以下の「GetValuesSqlStatement」のようなメソッドを持つインターフェースを実装することです:

public string SqlPattern { get { ... } }
//this varies; eg. "SELECT name FROM someTable WHERE startDate < {0}"

public string DatabaseType { get { ... } }
//this varies; eg. "SqlServer"

public string GetValuesSqlStatement(List<object> paramValues)
{
    //...desired logic here, using DatabaseType, SqlPattern and paramValues
}

ここでは、実行可能な SQL ステートメントを生成する必要があるため、クエリの実行でパラメーターを使用することはできません。そして、私が実装しなければならないインターフェースは交渉不可能です。結果の日付がデータベース クエリ エンジンによって正しく解釈されることを確認するための最善の方法は何ですか? paramValues に .NET DateTime オブジェクトが含まれていると仮定すると、SQL パターン文字列にプラグインする前に、これらをどのように文字列にフォーマットする必要がありますか? must データベースで最も一般的な日付形式は何ですか? (例: 「dd-mmm-yyyy」のようなもの)。

注意: 2005 年以降の Sql Server と Oracle 10g 以降のことだけを心配する必要があります。したがって、SQL は有効な T SQL および PL SQL である必要があり、両方のフレーバーで同じことを意味します。

4

3 に答える 3

1

任意の DB で日付形式 'yyyy-mm-dd' を使用する場合は問題ありません。これは ISO 8601 ( http://www.iso.org/iso/date_and_time_format )によるものです。

于 2011-09-23T02:56:13.173 に答える
1

SQL Server の唯一の明確な日付形式は YYYYMMDD だと思います。

Oracle は DATE 'YYYY-MM-DD' 表記を使用します。

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements003.htm#BABGIGCJ

いくつかのシナリオでは両方で機能する表記法があるかもしれませんが、考えられるすべての地域サーバー設定で両方で機能する表記法があるとは思えません。

あなたが言ったように、 YYYY-MON-DD が役立つかもしれません - それはOracleのデフォルトです。

于 2011-09-23T02:56:44.763 に答える
0

同様の質問を持つ他の人にとって有用な提案になる可能性があるため、質問の範囲から逸脱していても、私はこれに対する独自の回答を提供しています。

各インスタンス (または世界のさまざまな地域の各顧客) が、オプションでパラメーター プレースホルダーの後半部分にフォーマット文字列を指定することを期待できることに気付きました。例えば。実装:

public string SqlPattern { get {
    return "SELECT name FROM someTable WHERE startDate < {0:yyyy-mm-dd}";
} }  

そして、私のコンポーネントは、日付のフォーマット方法についてまったく心配する必要はありません。デフォルトでは、「yyyymmdd」を使用するか、サーバーのカルチャを使用してデフォルトを選択することをお勧めします。それ以外の場合は、カスタム指定のパターンを使用します。これは、SQL 用の文字列にフォーマットする必要がある他の型にも適用できる一般的なアプローチです。

于 2011-09-23T03:28:59.683 に答える