Board logo

標題: [發問] SQL如何用儲存格參數(日期)作條件依據 [打印本頁]

作者: dou10801    時間: 2023-1-30 15:15     標題: SQL如何用儲存格參數(日期)作條件依據

SQL如何用儲存格參數(日期)作條件依據,感恩.
作者: lpk187    時間: 2023-1-30 22:13

MySQL = "select *  from [sheet1$a1:f] where Format(開單日期,'ddddd') = '" & ms2 & "'"
作者: singo1232001    時間: 2023-1-31 05:59

本帖最後由 singo1232001 於 2023-1-31 06:01 編輯

回復 1# dou10801


    '求某天
'ms2 = Format([g1], "yyyy-mm-dd")
'MySQL = "select *  from [sheet1$a1:f] where Format(開單日期,'yyyy-MM-dd') = '" & ms2 & "'"  '大小寫有差

'求某天並日期時間遞增排序
'ms2 = Format([g1], "yyyy-mm-dd")
'MySQL = "select *  from [sheet1$a1:f] where Format(開單日期,'yyyy-MM-dd') = '" & ms2 & "' " & " order by 開單日期 asc"  '大小寫有差

'求當天某時段  2019/1/1  11:00~14:00
'ms31 = Format(#1/1/2019 11:00:00 AM#, "yyyy-mm-dd HH:nn:ss")
'ms32 = Format(#1/1/2019 2:00:00 PM#, "yyyy-mm-dd HH:nn:ss")
'MySQL = "select *  from [sheet1$a1:f] where Format(開單日期,'yyyy-MM-dd HH:nn:ss') between '" & ms31 & "' and'" & ms32 & "'"  '大小寫有差

'求連續天數 2019/1/1~2019/1/2
'ms41 = Format([g1], "yyyy-mm-dd")
'ms42 = Format([g1] + 1, "yyyy-mm-dd")
'MySQL = "select *  from [sheet1$a1:f] where Format(開單日期,'yyyy-MM-dd') between '" & ms41 & "' and'" & ms42 & "'"    '大小寫有差

'求任幾個天數  2019  1/1 ,1/3, 1/5
'ms51 = Format(#1/1/2019#, "'yyyy-mm-dd'")
'ms52 = Format(#1/3/2019#, "'yyyy-mm-dd'")
'ms53 = Format(#1/5/2019#, "'yyyy-mm-dd'")
'MySQL = "select *  from [sheet1$a1:f] where Format(開單日期,'yyyy-MM-dd') in("            '大小寫有差
'MySQL = MySQL & ms51 & ","
'MySQL = MySQL & ms52 & ","
'MySQL = MySQL & ms53 & ")"
作者: dou10801    時間: 2023-1-31 08:42

感謝 lpk187及 singo1232001兩位前輩指導,對初學SQL語法受益良多,更感恩singo1232001加碼指點對其他日期運用查詢更靈活.
作者: hcm19522    時間: 2023-1-31 11:30

https://blog.xuite.net/hcm19522/twblog/590705213
作者: singo1232001    時間: 2023-1-31 16:49

本帖最後由 singo1232001 於 2023-1-31 16:50 編輯

回復 4# dou10801


抱歉 更正一下
關於vba 中Format 有字數上限 (而sql的Format沒有 )

所以 ms31 查詢時間的例子中
ms31 = Format(#1/1/2019 11:00:00 AM#, "yyyy-mm-dd HH:nn:ss")  '產出的文字 可能會斷行   秒數就可能會消失

建議改成拚字的方式
ms31 = Format(#1/1/2019 11:00:00 AM#, "yyyy-mm-dd   & " " & format(#1/1/2019 11:00:00 AM#, "HH:nn:ss")

或者
ms31 = Format([g1], "yyyy-mm-dd")   & " " & format(#11:00:00 AM#, "HH:nn:ss")

或者
ms31 = Format([g1], "yyyy-mm-dd")  & " " &  "11:00:00"

當然你也可以一次把  '符號給拼出來 之後就不用加
ms31 = Format([g1], "'yyyy-mm-dd")  & " " &  "11:00:00'"

(另外補充  在vba中 能運算的默認日期格式 是2019/1/1    , 而SQL中 能運算的默認格式是2019-1-1  ) 所以在文字中要做轉換
作者: lpk187    時間: 2023-1-31 20:37

回復 6# singo1232001


    ADODB寫SQL語法,拼接的方式,最容易出錯了(以後的閭題也會很多),建議寫SQL時最好使用參數的方式,就沒有你上述的問題了!
Set cmd = CreateObject("ADODB.Command")
cmd.CommandText = "Select Max(Id) From [進貨$] Where 進貨日期=@進貨日期"
cmd.Prepared = True
cmd.Parameters.Append cmd.CreateParameter("@進貨日期", adDate, adParamInput, , [G1])
cmd.ActiveConnection = conn
Set rs = cmd.Execute
作者: dou10801    時間: 2023-2-1 08:07

回復 7# lpk187 lpk187前輩,是否能依上方檔案
sql 日期1.rar,作實際示範學習.感恩.
作者: Scott090    時間: 2023-2-15 06:57

感謝各位
對SQL 的 日期格式轉換需求的提點




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)