SQL 合并 LIKE & AND & =

SQL combine LIKE & AND & =

var getData = "SELECT * FROM Test WHERE exercise = " + exercise + " AND exerVariName LIKE '[A-Z]%' AND date >= '" + fromDate + "' AND date <= '" + toDate + "'";

我似乎无法弄清楚为什么这一行中的 LIKE 部分不起作用!我在 w3schools 上发现,如果您想要该列中的所有值,您可以执行 LIKE '[a-z]%'。但它不起作用。我没有收到任何错误,但我也没有收到任何结果!

当我不想要所有但特定的 (exerVariName) 时,我有第二行,这个行。 (我通过下拉菜单选择一个特定的或 'All'。)

var getDataS = "SELECT * FROM Test WHERE exercise = " + exercise + " AND exerVariName = '" + exerVariName + "' AND date >= '" + fromDate + "' AND date <= '" + toDate + "'";

更新!

我想从数据库中写出一些数据以供查看,所以我 select 'exercise' 使用单选按钮,'exerVariName' 使用下拉菜单, 'fromDate/toDate' 使用一个文本框!

<div>
    <select name="exerVariName">
        <option value="all">All</option>
        @foreach (var get in db.Query(getVariName)) {
            <option value="@get.exerVariName">@get.exerVariName</option> 
        }
    </select>
</div>

所以我从数据库中获取了 select 选项数据,除了第一个我用 "all" 作为值放在那里的选项数据。

然后我有这段代码:(thisData放在foreach中)

var thisData = "";

if  (exerVariName == "all") {
    thisData = getData;
} else {
    thisData = getDataS;
}

因此,如果 select-option-dropdown 值是 "all" 一个,thisData = getData 就是这个带 LIKE 的,这一行的重点是选择来自数据库的列,这就是我选择所有字母 (a-z) 的原因。

var getData = "SELECT * FROM Test WHERE exercise = " + exercise + " AND exerVariName LIKE '[A-Z]%' AND date >= '" + fromDate + "' AND date <= '" + toDate + "'";

如果我 select 下拉列表中的特定内容,它将转到 if 语句的 ELSE 部分并使用此行

var getDataS = "SELECT * FROM Test WHERE exercise = " + exercise + " AND exerVariName = '" + exerVariName + "' AND date >= '" + fromDate + "' AND date <= '" + toDate + "'";

如果您需要更多信息,请告诉我!

试试这个

var getData = "SELECT * FROM Test WHERE exercise = " + exercise + " AND exerVariName NOT LIKE '%[^A-Z]%' AND date >= '" + fromDate + "' AND date <= '" + toDate + "'";

如果你想得到所有的测试基础,那么请使用这样的

var getData = "SELECT * FROM Test WHERE exercise = " + exercise + " AND exerVariName LIKE '%' AND date >= '" + fromDate + "' AND date <= '" + toDate + "'";

the point of this line is to choose everything in the column from the database which is why I choose all the letters (a-z).

var getData = "SELECT * FROM Test WHERE exercise = " + exercise + " AND exerVariName LIKE '[A-Z]%' AND date >= '" + fromDate + "' AND date <= '" + toDate + "'";

我觉得你想多了。如果你想要一切(即在列上没有过滤器)然后完全省略子句上的 part/filter。

"SELECT * FROM Test WHERE exercise = " + exercise + " AND date >= '" + fromDate + "' AND date <= '" + toDate + "'";

最后,这很容易受到 sql 注入攻击,您应该使用参数化语句而不是字符串连接。如果您使用该语言更新您的问题,我可能能够获得该语言的参数化查询示例。