我在这里阅读了有关在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上使用通配符过滤.我正专注于立即降低语法.我相信这应该返回参数与表中存储的合同号匹配的所有记录.任何帮助或建议将不胜感激.
我正在尝试检查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值.这不是坏事吗?
请帮我创建一个包含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)
在上面的查询中,所有那些匹配最大条件的记录应该在顶部,而较少匹配的条件记录应该在底部.
所以我有一张表格如下
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) 我有查询:
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获取数据,我必须检查这些名称是否在我们的系统中.
(请原谅可怕的人为例子)
我想要做的是在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) 我的问题是: 在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包装器.
我正在使用Cassandra 1.1.2我正在尝试将RDBMS应用程序转换为Cassandra.在我的RDBMS应用程序中,我有以下表名为table1:
| Col1 | Col2 | Col3 | Col4 |
Run Code Online (Sandbox Code Playgroud)
该表计有超过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有效 …
有表名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版本有问题?
对此有任何帮助表示高度赞赏.谢谢 :)
我已经看过这个关于如何在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.我知道我在这里完全错了.我不知道该怎么做.
理想情况下,我想通过提供可用于使用ands和or运算符构建查询的对象集合来进一步扩展它.