标签: case

Python 匹配/大小写在 case 中使用全局变量(可通过使用类来解决)

我想通过匹配变量中存储的输入来实现匹配/大小写。预期的逻辑应该是这样的:

match x:
    case y:
        print(...)    
    case z:
        print(...) 
Run Code Online (Sandbox Code Playgroud)

事实证明这个方法行不通。
它会导致此错误:“仅在最后一个 case 语句中才允许不可反驳的模式”,
我相信会发生这种情况,因为不知何故,第一个 case 旁边的变量被分配给下一个匹配的变量的值:如果我去调试,通过在“case y”行中,y 的值更改为 x 中存储的值。

但是,如果一切都属于一个类,则不会发生这种情况,如下所示:

class Vars:
    x = int(input())
    y = int(input())
    z = int(input())
match Vars.x:
    case Vars.y:
        print("something")
    case Vars.z:
        print("anything")
Run Code Online (Sandbox Code Playgroud)

这种方法不会导致任何错误。

这是为什么?我的意思是,是什么让类变量成为可反驳的模式?

python class case match

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

WHERE子句中无效的列名错误,使用CASE选择列

我有一个(相当复杂)的SQL语句,我从很多不同的表中选择数据,并应付不良遗留的数据结构,我有几个基于其他列的值是获得它们的值自定义列的.我目前用CASE声明解决了这个问题:

 SELECT
     ...,
     CASE channel
         WHEN 1 THEN channel_1
         WHEN 2 THEN channel_2
         ...
         ELSE 0
     END AS ChannelValue,
     CASE channelu
         WHEN 1 THEN channelu_1
         WHEN 2 THEN channelu_2
         ...
         ELSE '0'
     END AS ChannelWithUnit,
     ...
 FROM 
     ... 
 --rest of statement continues with multiple joins and where/and clauses...
Run Code Online (Sandbox Code Playgroud)

我得到的所有执行在MS SQL Server Management Studio中查询时,我所期望的结果,和列名被列为我在指定AS条款.但是,出于某种原因,我不允许在WHERE语句中使用条件值.如果我加

AND ChannelValue > Limit * p.Percentage / 100
Run Code Online (Sandbox Code Playgroud)

在查询结束时,我在该行上收到错误消息

消息207,级别16,状态1,行152
无效的列名称"ChannelValue"

为什么不允许这样做?我该怎么做呢?

t-sql sql-server case calculated-columns where

9
推荐指数
2
解决办法
9859
查看次数

在Erlang的case语句中有多个匹配?

我有那种代码:

case sth of
    {a, 1} -> doA();
    {a, 2} -> doA();
    {a, 3} -> doB()
end.
Run Code Online (Sandbox Code Playgroud)

有没有办法不重复"doA()"部分?我认为它应该很容易,但我在谷歌找不到答案.

erlang case

9
推荐指数
2
解决办法
5647
查看次数

具有嵌套多个条件的WHERE子句

我想检索条件in WHERE子句中的数据.
这是我的表看起来像:

Name   Location    Age
----------------------
AAA     Bhuj       24
BBB     Mumbai     22
CCC     Bhuj       18
DDD     Bhuj       27
EEE     Mumbai     26
Run Code Online (Sandbox Code Playgroud)

我的WHERE条款是:
if location = 'Bhuj' then Age>20 else if location = 'Mumbai' then Age>25

我正在尝试使用此代码来实现此目的:

SELECT * FROM testing
WHERE 
CASE Location WHEN 'Bhuj' THEN Age>20
              WHEN 'Mumbai' THEN Age>25
END;
Run Code Online (Sandbox Code Playgroud)

此代码适用于MySQL(请参阅此SQLFiddle),但不适用于SQL Server(请参阅此SQLFiddle)并给出以下错误:

'>'附近的语法不正确:SELECT*FROM测试WHERE case位置当'Bhuj'然后Age> 20当'Mumbai'然后Age> 25 end

有什么建议吗?

sql sql-server case where-clause multiple-conditions

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

SQL CASE表达式 - 设置局部变量的值

我有一些使用多个if语句(大约100)的T-SQL代码,如下所示.如果第一个IF语句条件的计算结果为TRUE,它仍会评估99个语句的其余部分.

IF(@check = 'abc') SET @var1 = @value
IF(@check = 'def') SET @var2 = @value
IF(@check = 'ghi') SET @var3 = @value
IF(@check = 'jkl') SET @var4 = @value
IF(@check = 'mno') SET @var5 = @value
…
…
Run Code Online (Sandbox Code Playgroud)

我想将它们转换为使用CASE表达式.例如

CASE @check
    WHEN 'abc' THEN SET @var1 = @value
    WHEN 'def' THEN SET @var2 = @value
    WHEN 'ghi' THEN SET @var3 = @value
    WHEN 'jkl' THEN SET @var4 = @value
    WHEN 'mno' THEN SET @var5 = @value
    …
    …
END
Run Code Online (Sandbox Code Playgroud)

但是,我无法这样做,我得到一个SQL错误,说我不能在CASE表达式中使用SET. …

sql t-sql sql-server sql-server-2000 case

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

MySQL Order By date列和整数列,但是指定整数列的排序规则?

我有下表:

-----------------------------------
  PK       integer          date
-----------------------------------
  1          2             03/01/01
  2          1             04/01/01
  3          3             02/01/01
  4          3             05/01/01
  5          2             01/01/01
  6          1             06/01/01
Run Code Online (Sandbox Code Playgroud)

我想要做的是按日期列进行排序,但是要使整数2的日期高于其他整数的顺序.我的输出就是这样的.

-----------------------------------
  PK       integer          date
-----------------------------------
  1          2             01/01/01
  5          2             03/01/01      
  3          3             02/01/01
  2          1             04/01/01
  4          3             05/01/01
  6          1             06/01/01
Run Code Online (Sandbox Code Playgroud)

目前,我完全不知道如何在MySQL中实现这一点,或者即使它可能.我还没有尝试任何东西,因为我不知道从哪里开始.

我应该说非2的整数顺序不是问题,所以下表同样好.

-----------------------------------
  PK       integer          date
-----------------------------------
  1          2             01/01/01
  5          2             03/01/01      
  2          1             04/01/01
  6          1             06/01/01
  3          3             02/01/01
  4          3             05/01/01
Run Code Online (Sandbox Code Playgroud)

mysql sql database case sql-order-by

9
推荐指数
2
解决办法
729
查看次数

Hive查询字符串大小写

有没有办法在执行此操作时获取所有类型的字符串案例:

select count(word) from table where word="abcd"
Run Code Online (Sandbox Code Playgroud)

实际上,当这样做时,它与此不一样:

select count(word) from table where word="ABCD"
Run Code Online (Sandbox Code Playgroud)

string select hive case

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

我是否需要在case表达式中使用else子句?

是否需要ELSECASE表达式中包含一个子句?

例如,如果我想拉动猫的动物名称而不是ELSE,我可以使用这个SELECT声明:

SELECT DISTINCT(CASE WHEN animal_type = 'cat' THEN animal_name END) AS cat_names
Run Code Online (Sandbox Code Playgroud)

我知道我可以放入animal_type = 'cat'我的WHERE条款然后

SELECT DISTINCT cat_names, 
Run Code Online (Sandbox Code Playgroud)

但我想知道答案.

sql select hive case

9
推荐指数
1
解决办法
7731
查看次数

SQL语句相当于三元运算符

我想创建一个与(x - y == 0) ? return 0 : return 100MySQL 相同的语句.可能看起来像这样的东西:

SELECT id, [(integer_val - 10 == 0) ? 0 : 100] AS new_val FROM my_table
Run Code Online (Sandbox Code Playgroud)

我想将每行中的属性与某个数字进行比较,如果该数字与行中的数字之间的差值为0,我希望它给我0,否则,我希望它给我100.

例:

应用此查询my_table(10为'与'对比'):

id  |   integer_val
===================
1   10
2   10
3   3
4   9
Run Code Online (Sandbox Code Playgroud)

会回来这个:

id  |   new_val
===================
1   100
2   100
3   0
4   0
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

mysql sql select if-statement case

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

如何反转从大写条目开始对嵌套列表进行排序?

清单r:

r= [['Paris', 10], ['amsterdam', 5], ['London', 18], ['london', 15], ['Berlin', 2], ['Stockholm', 4], ['oslo', 14], ['helsinki', 16], ['Zurich', 17]] 
Run Code Online (Sandbox Code Playgroud)

如果我做反向排序:

sorted(r, reverse=True)

[['oslo', 14], ['london', 15], ['helsinki', 16], ['amsterdam', 5], ['Zurich', 17], ['Stockholm', 4], ['Paris', 10], ['London', 18], ['Berlin', 2]]
Run Code Online (Sandbox Code Playgroud)

我想要的是从大写元素开始,而不是小写元素.

[ ['Zurich', 17], ['Stockholm', 4], ['Paris', 10], ['London', 18], ['Berlin', 2], ['oslo', 14], ['london', 15], ['helsinki', 16], ['amsterdam', 5]]
Run Code Online (Sandbox Code Playgroud)

Python3中是否有一种简单的方法可以按需要对列表进行排序?

python sorting list case

9
推荐指数
1
解决办法
506
查看次数