9

探している日付範囲内の行を取得するために、データテーブルでselectステートメントを作成しようとしています。私はこれに不慣れですが、このselectステートメントがどのように機能するのかよくわかりません。これを書こうとしましたが、動作しません。ここで手を貸していただけませんか。ハマった

foundRows = dt.Select("DATE1 <= '" + date1+ "' AND DATE2 >= '" + date1+ '"');
4

5 に答える 5

12

これは、私がテストした最適な検索基準です。あなたはデートしなければなりません。

開始日 = 2012 年 12 月 1 日 終了日 = 2012 年 12 月 31 日

適用するDataTableの列。(私のコードでは「日付」)

Select ステートメントは次のようになります。

  DataRow[] rows = newTable.Select("date >= #" + from_date + "# AND date <= #" + to_date + "#");
于 2013-01-31T06:17:54.973 に答える
10

日付を#でラップする以外に、date1が文字列ではなくDateTimeである場合は、ToString(日付形式)を使用して正しいSQLステートメントを取得する必要があります。デバッグの場合、最初にフィルターを含む文字列を作成し、次にその文字列を使用して選択を行うと簡単になります。次に、文字列を確認し、クエリビルダーでそれを使用してSQLを検証できます。

于 2012-06-07T15:18:16.587 に答える
2

この投稿に回答を投稿しました。

DataTable 正確な DateTime で選択

目盛りを使用して範囲内で選択することにより、同様のアプローチを使用できます。

于 2019-04-04T19:07:53.933 に答える
1

これを SSIS スクリプト コンポーネント内で使用します。日付の前後に「#」を含む上記の例を使用しました。また、それぞれを文字列に変換しました。これは完璧に機能しました。

SSIS 内でこれをセットアップする方法を知りたい場合に備えて: 最初に、レコードセットを格納するオブジェクト変数を含むレコードセットの宛先を使用するデータ フローがありました。

私のスクリプトでは、変数を読み取り専用として含めました。

メインクラスでは...

public class ScriptMain : UserComponent
{

OleDbDataAdapter a = new OleDbDataAdapter();
System.Data.DataTable AwardedVacTable = new System.Data.DataTable();
...
...

次に、事前実行で...

public override void PreExecute()
{
    base.PreExecute();

    a.Fill(AwardedVacTable, Variables.rsAwardedVac);
...
...

次に、カスタムメソッドでデータテーブルにアクセスしました...

String dtFilter = "EmployeeID = " + empId.ToString() + " AND (#" + Convert.ToString(StartDate) "# <= EndDate AND #" + Convert.ToString(StartDate) + "# >= StartDate" + " OR #" + Convert.ToString(StartDate.AddDays((double)numDays)) + "# >= StartDate AND #" + Convert.ToString(StartDate.AddDays((double)numDays)) + "# <= EndDate)";

DataRow[] Overlaps = AwardedVacTable.Select(dtFilter);
于 2014-07-02T14:30:02.123 に答える