根據使用者輸入變數在 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
);
回覆:根據使用者輸入變數在 SQL 中自訂日期範圍感謝您的協助。 這很完美!
回覆:根據使用者輸入變數在 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')
現在我可以在同一查詢中跨兩個資料庫使用相同的輸入日期變數。 一個查詢提取帶有數字日期的數據,另一個查詢提取基於字元的日期的數據。回覆:根據使用者輸入變數在 SQL 中自訂日期範圍有沒有辦法讓文字方塊中的相同使用者輸入在同一腳本中的另一個資料庫 SQL 拉取上工作? 唯一的問題是這個新資料庫遵循傳統/標準數字類型日期列。 有沒有辦法將使用者輸入(起始日期和截止日期)轉換為數字格式月日年的輔助變數? 主要基於字元的日期用於已解決的問題,輔助設定用於基於數字日期提取資料。
這是我試圖用來從另一個資料庫提取產量資料的 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");
回覆:根據使用者輸入變數在 SQL 中自訂日期範圍太感謝了。 該腳本運行良好,我正在獲取數據。
回覆:根據使用者輸入變數在 SQL 中自訂日期範圍您必須匹配不同日期的艙口。 來自 JMP 的日期有一個日期掩碼,而資料庫中的日期有另一個日期遮罩。 這應該可以做到:
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);回覆:根據使用者輸入變數在 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」的問題。 你能讓我知道為什麼那裡需要它嗎?

回覆:根據使用者輸入變數在 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
回覆:根據使用者輸入變數在 SQL 中自訂日期範圍這個問題的最大原因是我處理的資料庫有時間戳記是字元格式。 

回覆:根據使用者輸入變數在 SQL 中自訂日期範圍你好馬克,
也感謝您的回覆。 我也遇到此程式碼的問題。
以下是我在文字方塊中輸入的使用者輸入以及我在日誌中看到的錯誤的快照


回覆:根據使用者輸入變數在 SQL 中自訂日期範圍你好吉姆,
感謝您的回复,但我仍然遇到問題。 這是我的輸入的快照以及日誌中看到的相應錯誤
輸入類型1


輸入類型2


我感覺問題出在這部分程式碼上,但我仍然是一個學習 JSL 的人。 我非常感謝像您這樣的專家的回饋。 有什麼方法可以讓我們直接在SQL中使用使用者輸入變數「fromdate」和「todate」嗎?

回覆:根據使用者輸入變數在 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
);
回覆:根據使用者輸入變數在 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>