标签: where-clause

SQL - WHERE中的CASE表达式

我在这里阅读了有关在WHERE子句中使用CASE表达式的内容:

http://scottelkin.com/sql/using-a-case-statement-in-a-sql-where-clause/

我正在尝试使用它来根据用户应用程序传递的合同号来过滤select语句的结果.我的代码当前抛出了'无效参数'的错误,无论传入什么.我验证SELECT/FROM工作正常,如没有CASE表达式的WHERE子句.这是我的代码.

WHERE     (CASE WHEN @ContractNo = 0 THEN @ContractNo ELSE @ContractNo END =
tblContracts.ContractNo)
Run Code Online (Sandbox Code Playgroud)

代码的冗余用于故障排除,我打算稍后在CASE上使用通配符过滤.我正专注于立即降低语法.我相信这应该返回参数与表中存储的合同号匹配的所有记录.任何帮助或建议将不胜感激.

sql where-clause

7
推荐指数
2
解决办法
3万
查看次数

Linq where子句具有多个条件和null检查

我正在尝试检查linq中的日期是否为空,如果没有检查它的未来日期.

QuestionnaireRepo.FindAll(q => !q.ExpiredDate.HasValue || q.ExpiredDate >DateTime.Now).OrderByDescending(order => order.CreatedDate);
Run Code Online (Sandbox Code Playgroud)

我需要第二次检查才能申请,如果第一次是真的.我使用单个存储库模式,FindAll接受了where子句

有任何想法吗?这里有很多类似的问题,但没有给出答案,我对Linq很新,你可能已经猜到了:)

编辑:我得到了我现在需要的结果,但在某些情况下它将检查>条件值为null值.这不是坏事吗?

linq where-clause

7
推荐指数
1
解决办法
4万
查看次数

按最大条件匹配排序

请帮我创建一个包含10'where'子句的选择查询,顺序应该是这样的:结果应该按照大多数关键字(条件)匹配到最不匹配的顺序显示.

注意:所有10个条件都带有"OR".

请帮我创建这个查询.我正在使用ms-sql server 2005

喜欢:

Select *
  from employee
 where empid in (1,2,4,332,434)
    or empname like 'raj%'
    or city = 'jodhpur'
    or salary >5000
Run Code Online (Sandbox Code Playgroud)

在上面的查询中,所有那些匹配最大条件的记录应该在顶部,而较少匹配的条件记录应该在底部.

sql select sql-order-by where-clause

7
推荐指数
1
解决办法
2159
查看次数

SQL - 在当前日期/时间之后选择记录

所以我有一张表格如下

Date       Time        Field3        Field4 - etc.
--------------------------------------------------
05/07/11   17:45       blah          blah
05/07/11   19:45       blah          blah
08/07/11   17:30
08/07/11   19:00
09/07/11   19:00
Run Code Online (Sandbox Code Playgroud)

等等

我目前在我的WHERE声明中有一条规则,因此显示今天之间的所有日期(所以它将是05/07/11直到3年后的同一日期05/07/14).

我还想在WHERE语句下添加另一个规则,以便它只显示当前时间前两小时的时间(当前日期等于表中的日期).

所以在05/07/11 19:00它应该显示:

Date       Time        Field3        Field4 - etc.
--------------------------------------------------
05/07/11   17:45       blah          blah
05/07/11   19:45       blah          blah
08/07/11   17:30
08/07/11   19:00
09/07/11   19:00
Run Code Online (Sandbox Code Playgroud)

在同一天21:46,现在应该显示:

Date       Time        Field3        Field4 - etc.
--------------------------------------------------
08/07/11   17:30
08/07/11   19:00
09/07/11   19:00
Run Code Online (Sandbox Code Playgroud)

我将如何在我的SQL中执行此操作?我认为它必须是if then或case当时声明,但我还没有能够解决它?

ALSO日期是在VB.Net中生成的,所以时间也是如此.当前的sql(和工作)代码是:

SELECT m.MatchID Manage, m.Date, m.Time, t.TeamCode "Home", b.TeamCode "Away", 
g.GroundName "Ground", ( SUBSTRING(u.GivenName,1,1) + '. …
Run Code Online (Sandbox Code Playgroud)

sql time where-clause

7
推荐指数
2
解决办法
3万
查看次数

Mysql Where ... In ... AND where ... in ...应该只匹配相同的索引

我有查询:

SELECT * FROM `users` 
WHERE (`firstname` LIKE 'Luke' AND `lastname` LIKE 'Skywalker') OR  
 (`firstname` LIKE 'Foo' AND `lastname` LIKE 'Bar') OR 
(`firstname` LIKE 'Tom' AND `lastname` LIKE 'Turner');
Run Code Online (Sandbox Code Playgroud)

但我想通过使用where ... in ...来尝试使其更具可读性

SELECT * FROM users 
WHERE `firstname` 
    IN ('Luke','Foo','Tom') AND `lastname` IN ('Skywalker','Bar','Turner');
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这也将匹配"Tom Skywalker","Foo Turner"所有混合你可以想到.

我必须选择first和lastname(也许更多字段,如DOB),因为我从外部API获取数据,我必须检查这些名称是否在我们的系统中.

mysql where-clause

7
推荐指数
1
解决办法
659
查看次数

如何在"where"子句中赋予表达式泛型类型?

(请原谅可怕的人为例子)

我想要做的是在where子句中指定类型:

somemap :: (a -> b) -> [a] -> [b]
somemap f xs = ys
  where
    some = take 5 xs :: [a]
    ys = map f some :: [b]
Run Code Online (Sandbox Code Playgroud)

但这会导致错误:

*Main> :load file.hs 
[1 of 1] Compiling Main             ( file.hs, interpreted )

fil.hs:15:18:
    Couldn't match expected type `a1' against inferred type `a'
      `a1' is a rigid type variable bound by
           an expression type signature at file.hs:15:25
      `a' is a rigid type variable bound by
          the type signature for …
Run Code Online (Sandbox Code Playgroud)

generics haskell types where-clause type-declaration

7
推荐指数
1
解决办法
351
查看次数

如何编写仅在没有比较运算符的情况下计算结果为true的where子句中使用的函数?

我的问题是: 在Oracle中,regexp_like在where子句中单独工作,而不必与1或0或字符串进行比较.只能在case语句或where子句中评估某些内容时调用该函数.由于无法描述(尝试在数据字典中搜索它),我想知道如何编写一个以相同方式工作的函数.

例如:

function is_prod
returns boolean
is 
  l_var boolean := false;
begin
  if sys_context('userenv','db_unique_name') = '"PROD_SERVER"' then
    l_var := true;
  end if;
return l_var;
end;
Run Code Online (Sandbox Code Playgroud)

该函数编译,但不能在如下的SQL语句中使用:

select *
from table t
where is_prod
Run Code Online (Sandbox Code Playgroud)

因为我收到以下错误:ORA-00920:无效的关系运算符.

将它与数字或真实比较也不起作用.

我在哪里可以找到regexp_like的代码库,或者我需要做些什么来使其像regexp_like一样工作?

注意:我已经浏览了几个小时,发现Oracle的regexp函数实际上是java调用,但这意味着它们仍然需要一个pl/sql包装器.

sql oracle plsql where-clause conditional-statements

7
推荐指数
2
解决办法
5130
查看次数

Cassandra:使用where子句查询包含更大或更小的(<和>)

我正在使用Cassandra 1.1.2我正在尝试将RDBMS应用程序转换为Cassandra.在我的RDBMS应用程序中,我有以下表名为table1:

| Col1 | Col2 | Col3 | Col4 |
Run Code Online (Sandbox Code Playgroud)
  1. Col1:String(主键)
  2. Col2:String(主键)
  3. Col3:Bigint(索引)
  4. Col4:Bigint

该表计有超过2亿条记录.最常用的查询类似于:

Select * from table where col3 < 100 and col3 > 50;
Run Code Online (Sandbox Code Playgroud)

在Cassandra中,我使用以下语句来创建表:

create table table1 (primary_key varchar, col1 varchar, 
col2 varchar, col3 bigint, col4 bigint, primary key (primary_key));

create index on table1(col3);
Run Code Online (Sandbox Code Playgroud)

我将主键更改为一个额外的列(我计算了我的应用程序中的键).导入几条记录后,我尝试执行以下cql:

select * from table1 where col3 < 100 and col3 > 50;
Run Code Online (Sandbox Code Playgroud)

结果是:

Bad Request: No indexed columns present in by-columns clause with Equal operator
Run Code Online (Sandbox Code Playgroud)

查询从table1中选择col1,col2,col3,col4,其中col3 = 67有效 …

cql where-clause cassandra

7
推荐指数
1
解决办法
4634
查看次数

LIKE'[charlist]%'语法在MySQL中不起作用(phpMyAdmin)

有表名Students.我想提取名字以'n'或'p'或'y'开头的学生的名字.我知道在TSQL(MS SQL服务器)中,我可以按如下方式编写查询,它可以工作:

SELECT * FROM Students WHERE StudentName LIKE '[npy]%'
Run Code Online (Sandbox Code Playgroud)

但是当我在MySQL(phpmyadmin)中执行相同的查询时,我无法检索到正确的结果集.我尝试将学生姓名的字母转换为charlist中提到的相同案例.我做了一些谷歌搜索,发现在MySQL中我们需要将其指定为正则表达式.我执行了以下查询并得到了预期的结果.

SELECT * FROM Students WHERE StudentName REGEXP '[[:<:]]n | [[:<:]]p | [[:<:]]y'
Run Code Online (Sandbox Code Playgroud)

我想知道LIKE '[charlist]%'语法不能与MySQL一起使用的原因.是由于MySQL中的实现(MySQL不支持语法)还是我正在使用的phpmyadmin版本有问题?

对此有任何帮助表示高度赞赏.谢谢 :)

regex mysql sql where-clause

7
推荐指数
1
解决办法
6153
查看次数

如何在Entity Framework中动态构造Where Expression?

我已经看过这个关于如何在Entity Framework中动态创建OrderBy表达式的答案.但我还想构建一个动态Where表达式.有点像这样:

public IEnumerable<InventoryItem> GetAll(string filterBy, object value)
{
  var results = new List<InventoryItem>();
  using (var db = new InventoryDb())
  {
    if (QueryHelper.PropertyExists<InventoryItem>(filterBy)) 
    {
      var query = db.rri_InventoryItems.WhereByProperty(filterBy, value); 

      foreach(var item in query.Where(expr))
      {
        results.Add(ConvertItem(item));
      }   
    }            
  }
  return results;
}
Run Code Online (Sandbox Code Playgroud)

传入属性以过滤by和值作为ab对象.Queryable有两种方法,哪里都有两个参数,所以我甚至不确定哪一个是正确的.

而且在这一点上我失去了一点点.我不确定如何重构原始的OrderByProerty方法来提供WhereByProperty.我知道我在这里完全错了.我不知道该怎么做.

理想情况下,我想通过提供可用于使用andsor运算符构建查询的对象集合来进一步扩展它.

linq entity-framework expression-trees where-clause

7
推荐指数
1
解决办法
2528
查看次数