是否有一种在Haskell中执行以下操作的有效方法:
case n of
0 -> doThis
1 -> doThat
2 -> doAnother
3..99 -> doDefault
Run Code Online (Sandbox Code Playgroud)
除了拥有97行"doDefault"之外?
作者R. Kent Dybvig在第86页的"The Scheme Programming Language,4th Edition"一书中,作者define-syntax为一个case接受其条件范围的语句编写了一个(Scheme宏).我以为我会在Clojure中尝试这个.
这是结果.
我怎样才能改善这个?我用:ii,:ie,:ei,和:ee用于运营商的范围,分别表示包含性的包容性,包容独占的,独占的包,以及异排他性的,.有更好的选择吗?
我选择扩展到一个cond而不是离散的if陈述,因为我觉得我将从cond宏的任何未来改进中获益.
(defmacro range-case [target & cases]
"Compare the target against a set of ranges or constant values and return
the first one that matches. If none match, and there exists a case with the
value :else, return that target. Each range consists of a vector containing
3 terms: a lower bound, …Run Code Online (Sandbox Code Playgroud) 有没有办法隐式调用case语句的对象上的方法?IE:
class Foo
def bar
1
end
def baz
...
end
end
Run Code Online (Sandbox Code Playgroud)
我希望能做的就是这样......
foo = Foo.new
case foo
when .bar==1 then "something"
when .bar==2 then "something else"
when .baz==3 then "another thing"
end
Run Code Online (Sandbox Code Playgroud)
...其中"when"语句正在评估case对象上方法的返回.这样的结构有可能吗?如果是这样的话,我一直无法弄清楚语法......
是否可以编写 switch case 代码而无需在 switch 中指定变量?假设我有两个变量 int x 和 int y。我想根据 x 和 y 的不同组合有条件地运行代码。例如
switch
{
case (x==1 && y==1): //do something.
break;
case (x==3 && y==-1): //do something.
break;
case (x==0 && y==3): //do something.
break;
default: //do something.
break;
}
Run Code Online (Sandbox Code Playgroud)
这段代码给我错误。
我已经看过很多关于这个场景的问题/论坛帖子,但是我要么不理解解决方案,要么提供的解决方案对于那个特定问题太具体了,我不知道如何将它应用到我的情况中.我有以下查询:
SELECT DISTINCT d.*
FROM Data d
JOIN Customers c
ON c.Customer_Name = d.Customer_Name
AND c.subMarket = d.subMarket
JOIN Sort s
ON s.Market = c.Market
ORDER BY d.Customer_Name, d.Category, d.Tab, d.SubMarket,
CASE s.sortBy
WHEN 'Comp_Rank'
THEN d.Comp_Rank
WHEN 'Market_Rank'
THEN d.Market_Rank
ELSE d.Other_Rank
END
Run Code Online (Sandbox Code Playgroud)
我在MySQL数据库上使用了那个确切的查询,它运行得很好.我们最近切换到SQL Server数据库,现在它不起作用,我收到错误:
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Run Code Online (Sandbox Code Playgroud)
我已经尝试将s.*添加到SELECT中(因为s.sortBy在CASE中)并且没有改变任何东西我也尝试列出Data中的每个字段并在SELECT中排序并且导致相同的精确错误.
数据中实际上没有重复,但是当我进行连接时,每个项目会产生4个完全重复的行,我不知道如何修复它,这就是我最初添加DISTINCT的原因.我尝试了LEFT JOIN,INNER JOIN等等的各种变化......并且无法获得不同的结果.无论如何,任何一个问题的解决方案都可以,但我假设需要更多信息才能找出JOIN重复问题.
编辑:我刚刚意识到我错误地输入了ORDER BY中的一些字段(例如,n.Category,n.Tab应该是d.Category,d.Tab).ORDER BY中的所有内容都来自我选择的数据表*.正如我所说,我也尝试列出SELECT中的每个字段,但没有帮助.
在postgresql中,我有一个case声明,我需要添加一个“不等于”子句。
当v1等于 v2 时,我希望它说 1,当v1 不等于 v2时,我想说 2。
create table test (
v1 varchar(20),
v2 varchar(20)
);
insert into test values ('Albert','Al'),('Ben','Ben')
select case v1
when v2 then 1
else 3
end
from test
Run Code Online (Sandbox Code Playgroud)
我尝试使用!=or <>,但这似乎不起作用。
有谁知道如何在caseSQL 语句中使用不等于吗?
希望这是一个快速
SELECT *
FROM T
left JOIN J ON
CASE
WHEN condition1 THEN 1 --prefer this option even if CASE2 has a value
WHEN condition2 THEN 2
ELSE 0
END = 1 (edit: but if 1 does not satisfy, then join on 2)
Run Code Online (Sandbox Code Playgroud)
两种情况都返回结果,但我希望 THEN 1 取代 THEN 2 并成为查找优先级
我可以让 SQL 做一些类似 join on 的事情max(CASE)吗?
基本上我试图从 Excel 复制嵌套的 INDEX/MATCH
编辑:我听到的是,案例应该在第一个返回的 TRUE 处停止,但是当我测试时它不会表现得那样
SELECT *
FROM T
left JOIN J ON
CASE
WHEN condition1 THEN 1 --prefer this …Run Code Online (Sandbox Code Playgroud) 我正在使用下面的 JSON,
{
"@context": "Testingcontext",
"@type": "Testingtype",
"actor": "Testingactor"
}
Run Code Online (Sandbox Code Playgroud)
我正在 scala 中创建一个案例类:
case class LoggedInAction(`@context`: String,`@type`:String,actor:String)
Run Code Online (Sandbox Code Playgroud)
如何在案例类中使用特殊字符@,例如 , ?&另外,如何使用此类案例类字段?
在我的数据库中,我有一个包含约 3500 条记录的表,作为更复杂查询的一部分,我尝试使用“CASE”条件对其自身执行内部联接,如下所示。
SELECT *
FROM some_table AS t1
JOIN some_table AS t2 ON t1.type = t2.type
AND CASE
WHEN t1.type = 'ab' THEN t1.first = t2.first
WHEN t1.type = 'cd' THEN t1.second = t2.second
-- Column type contains only one of 2 possible varchar values
END;
Run Code Online (Sandbox Code Playgroud)
问题是此查询执行 3.2 - 4.5 秒,而下一个请求将在 40 - 50 毫秒内执行。
SELECT *
FROM some_table AS t1
JOIN some_table AS t2 ON t1.type = t2.type
AND (t1.first = t2.first OR t1.second = t2.second)
Run Code Online (Sandbox Code Playgroud)
另外,根据第一种情况的执行计划,数据库处理约 580 …
CASE test
WHEN NULL and SUBSTR(('99999999' - Tst_Date),1,4) > 2009 THEN 'Medi'
WHEN NULL and SUBSTR(('99999999' - Tst_Date),1,4) < 2009 THEN 'hills'
ELSE test
END AS "Phy"
Run Code Online (Sandbox Code Playgroud)
我在上述案例陈述中遗漏了什么吗?我一直在收到00905. 00000 - "缺少关键字"错误?