sql >> データベース >  >> RDS >> Mysql

SQLクエリのBETWEEN句のExcelセルで日付を使用する

    日付や文字列などの値をSQLコマンドにフォーマットする代わりに、ADODB.Parameterを使用することをお勧めします。 -その場合、ドライバーがすべての作業を行います。文字列を引用符で囲んだり、データベースが正しく理解できるように日付をフォーマットしたりする必要はありません(これは、データベースや地域の設定などに大きく依存します)。さらに、SQLインジェクションに対する保護です。さらに、クエリオプティマイザは、毎回同じSQLコマンドを取得し、実行プランを記憶しているため、より適切に機能します。

    欠点:ADODB.commandを使用する必要があるため、コードは少し複雑になります オブジェクト。

    SQLステートメントには、単純な?を記述します。 パラメータを設定したい場所で。 ?の番号と位置に注意する必要があります とパラメータが一致します。

    Dim Conn As New ADODB.Connection, cmd As New ADODB.Command, param As ADODB.Parameter, rs As ADODB.Recordset
    Conn.Open "<your connection string>"
    Set cmd.ActiveConnection = Conn
    cmd.CommandText = "SELECT cID FROM logistics WHERE DATE(insert_timestamp) BETWEEN ? AND ? GROUP BY 1"
    
    Set param = cmd.CreateParameter(, adDate, adParamInput, , Date)
    cmd.Parameters.Append param
    Set param = cmd.CreateParameter(, adDate, adParamInput, , Date + 1)
    cmd.Parameters.Append param
    
    Set rs = cmd.Execute
    Debug.Print rs.Fields(0).Name, rs(0).Value
    

    P.S.日付の処理には少し怠惰でした。真夜中に正確にデータがあると、データが多すぎます。



    1. インデックスを適切に使用していないOracleバインド変数の問題

    2. nvarchar(max)とNText

    3. MySQLは現在のストリークの連続した日付をカウントします

    4. MySQLサーバーとMicrosoftSQLServer2008の両方でNHibernateを使用する方法