SQL结合LIKE& AND& =

时间:2016-11-28 19:45:11

标签: sql equals sql-like

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

我似乎无法弄清楚为什么这行中的LIKE部分不起作用!我在w3schools发现你可以做像[a-z]%&#39;如果你想要那个列中的所有值。但它不起作用。我没有收到任何错误,但我也没有得到任何结果!

我有第二行,当我不想要所有,但一个特定的(exerVariName),这个工作。 (我通过下拉菜单选择特定的一个或全部&#39;)

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

更新<!/强>

我想从db中写出一些数据只是为了查看,所以我选择“练习”#39;使用radiobuttons,&#39; exerVariName&#39;使用下拉菜单和来自日期/日期&#39;用文本框!

<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选项数据,除了我放在那里的第一个&#34; all&#34;作为价值。

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

var thisData = "";

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

因此,如果select-option-dropdown值为&#34; all&#34;一,thisData = getData这是一个LIKE,这一行的重点是从数据库中选择列中的所有内容,这就是我选择所有字母(a-z)的原因。

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

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

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

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

3 个答案:

答案 0 :(得分:2)

  

这一行的目的是从数据库中选择列中的所有内容,这就是我选择所有字母(a-z)的原因。

     

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

我认为你是在思考这个问题。如果你想要一切(即列上没有过滤器),那么完全省略该子句上的那个部分/过滤器。

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

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

答案 1 :(得分:1)

如果您希望获得所有测试基础,请像这样使用

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

答案 2 :(得分:0)

试试这个

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