ユーザー入力変数に基づいてSQLでカスタム日付範囲を持つやあ、
カスタム ユーザー入力ベースの変数を SQL コードに挿入しようとしているときに問題が発生しました。 私が接続しているデータベースの問題は、日付列が文字であることです。 したがって、SQL クエリ内のハードコードされた日付でうまく機能する実際のコードは次のとおりです。
Open Database("Generic database connection string",
" SELECT
p.productname,
p.model,
p.family,
TO_DATE (SUBSTR (txntime, 1, 15), 'yyyy/mm/dd hh24miss') txntime
FROM database p
WHERE
txntime >= '20161201 000000000'
AND txntime < '20161231 000000000'
",
// End of SQL statement
"New_Table" // New table name
);次の図は、このテーブルに日付がどのように保存されるかを示すサンプル ビューを示しています。 列のプロパティは文字と名義です。

これは、ユーザー入力変数を挿入しようとしたコードです。 このコードは空のテーブルを返します。
Delete Symbols();
Delete Globals();
nw = new window("Scrap Data", << modal(),
panelbox("Enter Date Range",
hlistbox(
text box("From Date"),
fromdate_teb = text edit box("%", << set width (100)),
),
hlistbox(
text box("To Date"),
todate_teb = text edit box("%" , << set width (100)),
),
),
panelbox("Actions",
hlistbox(
ok_button = button box("OK",
fromdate = fromdate_teb << get text;
todate = todate_teb << get text;
ok_pushed = 1;),
cancel_button = button box("Cancel", ok_pushed = 0),
)
)
);
Open Database("Generic database connection string",
" SELECT
p.productname,
p.model,
p.family,
TO_DATE (SUBSTR (txntime, 1, 15), 'yyyy/mm/dd hh24miss') txntime
FROM database p
WHERE
txntime >= '^fromdate^'
AND txntime < '^todate^'
",
// End of SQL statement
"New_Table" // New table name --> can be changed as per requirements
);
Re: ユーザー入力変数に基づいて SQL でカスタムの日付範囲を設定する助けてくれてありがとう。 これは完璧に機能しました!
Re: ユーザー入力変数に基づいて SQL でカスタムの日付範囲を設定するtest_date の WHERE 句を修正して修正しました
AND test_data.test_date BETWEEN TO_DATE('^fromdate^', 'YYYY/MM/DD hh:mi:ss am') AND TO_DATE('^todate^', 'YYYY/MM/DD hh:mi:ss am')
これで、同じクエリで 2 つのデータベース間で同じ入力日付変数を使用できるようになりました。 1 つのクエリは数値日付のデータをプルし、別の SQL は日付が文字ベースのデータをプルします。Re: ユーザー入力変数に基づいて SQL でカスタムの日付範囲を設定するテキスト ボックスからの同じユーザー入力を、同じスクリプト内の別のデータベース SQL プルで機能させる方法はありますか? 唯一の問題は、この新しいデータベースが従来の/標準の数値型の日付列に従っていることです。 ユーザー入力 (fromdate & todate) を数値形式の月日年で二次変数に変換する方法はありますか? すでに解決されている問題に使用される文字ベースの日付と、数値の日付に基づいてデータを抽出するように設定されたセカンダリ。
別のデータベースから収量データを抽出するために使用しようとしている SQL を次に示します。
nw = new window("New Window for user input", << modal(),
panelbox("Enter Date Range",
lineup box(ncol(2),
text box("From Date: "),
fromdate_teb = text edit box(format(today(),"y/m/d h:m:s"), << set width (150)),
text box("To Date: "),
todate_teb = text edit box(format(today(),"y/m/d h:m:s") , << set width (150)),
),
),
panelbox("Actions",
hlistbox(
ok_button = button box("OK",
fromdate = fromdate_teb << get text();
todate = todate_teb << get text();
ok_pushed = 1;),
cancel_button = button box("Cancel", ok_pushed = 0),
)
)
);
print(fromdate, todate);
Yieldsql = evalinsert(
" SELECT
model,
lot,
wafer,
COUNT(test_status_code) as BIN_COUNT
FROM
test_data
WHERE
purpose='PROD'
AND test_data.test_date BETWEEN TO_DATE('^fromdate^', 'MM/DD/YYYY hh24:mi:ss') AND TO_DATE('^todate^', 'MM/DD/YYYY hh24:mi:ss')
ORDER by lot, wafer");
dt = Open Database( "Generic database connection string", Yieldsql, "Yield_Data");
Re: ユーザー入力変数に基づいて SQL でカスタムの日付範囲を設定するどうもありがとう。 このスクリプトはうまく機能しており、データを取得しています。
Re: ユーザー入力変数に基づいて SQL でカスタムの日付範囲を設定する異なる日付のハッチを一致させる必要があります。 JMP からの日付には 1 つの日付マスクがあり、データベースの日付には別の日付マスクがあります。 これはそれを行う必要があります:
nw = new window("Scrap Data", << modal(),
panelbox("Enter Date Range",
lineup box(ncol(2),
text box("From Date: "),
fromdate_teb = text edit box(format(today(),"y/m/d h:m:s"), << set width (150)),
text box("To Date: "),
todate_teb = text edit box(format(today(),"y/m/d h:m:s") , << set width (150)),
),
),
panelbox("Actions",
hlistbox(
ok_button = button box("OK",
fromdate = fromdate_teb << get text();
todate = todate_teb << get text();
ok_pushed = 1;),
cancel_button = button box("Cancel", ok_pushed = 0),
)
)
);
print(fromdate, todate);
sql = evalinsert(
"SELECT
p.productname,
p.model,
p.family,
TO_DATE(SUBSTR (txntime, 1, 15), 'yyyymmdd hh24miss') txntime
FROM database p
WHERE TO_DATE(SUBSTR (txntime, 1, 15), 'yyyymmdd hh24miss') >= to_date('^fromdate^', 'yyyy/mm/dd hh:mi:ss am')
AND TO_DATE(SUBSTR (txntime, 1, 15), 'yyyymmdd hh24miss') < to_date('^todate^', 'yyyy/mm/dd hh:mi:ss am')");
Open Database("Generic database connection string", sql, "New_Table");
print(sql);Re: ユーザー入力変数に基づいて SQL でカスタムの日付範囲を設定するマークに感謝しますが、残念ながら実行しようとすると次のエラーが表示されます

エラーは、日付と時刻の間のスペースの連結が原因であると思われます (赤で強調表示)。 日付と時刻の間にスペースを入れる他の方法はありますか?
TO_DATE(SUBSTR (txntime, 1,4)||"/"||SUBSTR(txntime,5,2)||"/"||SUBSTR(txntime,7,2)||" "||SUBSTR(txntime,10,2)||":"||SUBSTR(txntime,12,2)||":"||SUBSTR(txntime,14,2),'yyyy/mm/dd hh24:mi:ss') txntime
また、where 句の「am」というテキストについて質問があります。 なぜそれが必要なのか教えていただけますか?

Re: ユーザー入力変数に基づいて SQL でカスタムの日付範囲を設定するTO_DATE 関数の日付と日付の形式は一致する必要があります。
私が送ったスクリプトの選択セクションでこれを試してください:
現在まで(
SUBSTR (txntime, 1,4)||"/"||SUBSTR(txntime,5,2)||"/"||SUBSTR(txntime,7,2)||" "||
SUBSTR(txntime,10,2)||":"||SUBSTR(txntime,12,2)||":"||SUBSTR(txntime,14,2),
'yyyy/mm/dd hh24:mi:ss') txntime
Re: ユーザー入力変数に基づいて SQL でカスタムの日付範囲を設定するこの問題の最大の理由は、私が扱っているデータベースのタイムスタンプが文字形式であることです。 

Re: ユーザー入力変数に基づいて SQL でカスタムの日付範囲を設定するこんにちはマーク、
お返事もありがとうございます。 このコードにも問題があります。
テキスト ボックスへのユーザー入力のスナップ ショットと、ログに表示されているエラーを次に示します。


Re: ユーザー入力変数に基づいて SQL でカスタムの日付範囲を設定するこんにちは、ジムさん
返信ありがとうございます。まだ問題があります。 これは私の入力のスナップショットと、ログに表示される対応するエラーです
入力タイプ 1


入力タイプ 2


問題はコードのこの部分にあると感じていますが、私はまだJSLを学んでいます。 あなたのような専門家からのフィードバックに感謝します。 ユーザー入力変数「fromdate」と「todate」をSQLで直接使用する方法はありますか?

Re: ユーザー入力変数に基づいて SQL でカスタムの日付範囲を設定するユーザーが入力する開始日と終了日の形式を強制する必要があると思うので、オプションを提供しました。 ただし、主な問題は where ステートメントにあると思うので、必要なものに近づけるオプションを提供しました。
Delete Symbols();
Delete Globals();
nw = new window("Scrap Data", << modal(),
panelbox("Enter Date Range",
hlistbox(
text box("From Date"),
fromdate_teb = text edit box(format(today(),"y/m/d h:m:s"), << set width (100)),
),
hlistbox(
text box("To Date"),
todate_teb = text edit box(format(today(),"y/m/d h:m:s") , << set width (100)),
),
),
panelbox("Actions",
hlistbox(
ok_button = button box("OK",
fromdate = fromdate_teb << get text();
todate = todate_teb << get text();
ok_pushed = 1;),
cancel_button = button box("Cancel", ok_pushed = 0),
)
)
);
Open Database("Generic database connection string",
" SELECT
p.productname,
p.model,
p.family,
TO_DATE (SUBSTR (txntime, 1, 15), 'yyyy/mm/dd hh24:mi:ss') txntime
FROM database p
WHERE
txntime >= to_date('"|| fromdate || "', 'yyyy/mm/dd hh:mi:ss am')
AND txntime < to_date('"|| todate || "', 'yyyy/mm/dd hh:mi:ss am')
",
// End of SQL statement
"New_Table" // New table name --> can be changed as per requirements
);
Re: ユーザー入力変数に基づいて SQL でカスタムの日付範囲を設定するこれを試して、うまくいくかどうかを確認してください
Names Default To Here( 1 );
Delete Symbols();
Delete Globals();
nw = New Window( "Scrap Data",
<<MODAL>= __From_Date__
AND txntime < __To_Date__
",
// End of SQL statement
"New_Table" // New table name --> can be changed as per requirements
)
),
Expr( __From_Date__ ), Parse( "'" || fromdate || "'" ),
Expr( __To_Date__ ), Parse( "'" || todate || "'" )
)
);</MODAL>