是否可以在MySQL 语句中组合CASE
语句和LIKE
运算符SELECT
?
例如,我试图查询一个数据库,该数据库以两种格式之一存储单个列中的数据(这很糟糕并且伤害了我的头脑,但我无法更改数据,所以它就是它.).所以有时列numbers
会有像"6901xxxxxxxx"这样的数据,有时会有像"91xxxxxxxxxxx"这样的数据.
我想做的是像这样查询数据 -
SELECT
CASE digits
WHEN LIKE "6901%" THEN substr(digits,4)
WHEN LIKE "91%" THEN substr(digits,2)
END as "digits",
FROM raw
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,但我希望它可能.
MySQL中的Case表达式和Case语句有什么区别?什么时候可以使用它们,使用一个优于另一个有什么好处?
案例陈述语法:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
Run Code Online (Sandbox Code Playgroud)
案例表达式语法:
CASE
WHEN [condition] THEN result
[WHEN [condition] THEN result ...]
[ELSE result]
END
Run Code Online (Sandbox Code Playgroud)
这些看起来几乎相同,但案例陈述的初始描述是这样的 The CASE statement for stored programs implements a complex conditional construct.
那么在存储程序中使用一个并且在普通查询中不可用的重要区别是什么?我在我正在玩的查询中尝试了这个,但它失败了 - sqlfiddle.如果是这种情况,为什么不在存储的程序中使用Case Expression?
还有其他任何语法差异需要注意,因为它们看起来完全相同吗?
我想在SELECT中使用CASE语句.
我从用户表中选择,并且(作为一个属性)我也使用嵌套SQL:
SELECT
registrationDate,
(SELECT COUNT(*) FROM Articles WHERE userId = Users.userId) as articleNumber,
hobbies, ...
FROM USERS
Run Code Online (Sandbox Code Playgroud)
然后我想做一个CASE语句来获得用户的排名(排名取决于articleNumber).
我试过这样的:
SELECT
registrationDate,
(SELECT COUNT(*) FROM Articles WHERE Articles.userId = Users.userId) as articleNumber,
ranking =
CASE
WHEN articleNumber < 2 THEN 'Ama'
WHEN articleNumber < 5 THEN 'SemiAma'
WHEN articleNumber < 7 THEN 'Good'
WHEN articleNumber < 9 THEN 'Better'
WHEN articleNumber < 12 THEN 'Best'
ELSE 'Outstanding'
END,
hobbies, etc...
FROM USERS
Run Code Online (Sandbox Code Playgroud)
解析显示没有错误,但当我尝试运行它时,我收到错误:
消息207,级别16,状态1,过程GetUserList,行XY
无效列名称'articleNumber'.
我想,CASE不会"识别"我的嵌套SELECT.
我帮助自己使用其他一些解决方案,如 SQL Server 2008 …
我对不同类型的标识符案例感兴趣,以及人们称之为什么.您是否知道此列表或其他替代名称的任何添加内容?
我正在使用Notepad ++在5453行语言文件中进行一些文本替换.文件行的格式为:
variable.name = Variable Value Over Here, that''s for sure, Really
Run Code Online (Sandbox Code Playgroud)
双撇号是故意的.
我需要将值转换为句子大小写,除了"Here"和"Really"这两个词是正确的并且应该保持大写.如您所见,值中的大小写通常是混合开始的.
我已经做了一段时间了.我到目前为止所有的是:
(. )([A-Z])(.+)
Run Code Online (Sandbox Code Playgroud)
这似乎至少选择了正确的字符串.替换件是我在努力的地方.
我正在使用以下脚本,它使用case语句来查找服务器.
#!/bin/bash
SERVER=$1;
echo $SERVER | egrep "ws-[0-9]+\.host\.com";
case $SERVER in
ws-[0-9]+\.host\.com) echo "Web Server"
;;
db-[0-9]+\.host\.com) echo "DB server"
;;
bk-[0-9]+\.host\.com) echo "Backup server"
;;
*)echo "Unknown server"
;;
esac
Run Code Online (Sandbox Code Playgroud)
但它没有用.正则表达式正在与egrep合作,但不与案例合作.样本O/P.
./test-back.sh ws-23.host.com
ws-23.host.com
Unknown server
Run Code Online (Sandbox Code Playgroud)
任何的想法 ?
我正在尝试创建一个switch语句但我似乎无法使用得到评估的表达式(而不是设置字符串/整数).我可以使用if语句轻松完成此操作,但希望案例更快.
我正在尝试以下方法
function reward(amount) {
var $reward = $("#reward");
switch (amount) {
case (amount >= 7500 && amount < 10000):
$reward.text("Play Station 3");
break;
case (amount >= 10000 && amount < 15000):
$reward.text("XBOX 360");
break;
case (amount >= 15000):
$reward.text("iMac");
break;
default:
$reward.text("No reward");
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西,或者这是不可能的?谷歌在这种情况下并不友善.
任何帮助/指针赞赏
中号
我的源表看起来像这样
Id StartDate
1 (null)
2 12/12/2009
3 10/10/2009
Run Code Online (Sandbox Code Playgroud)
我想创建一个选择上面的select语句,但是如果日期不为null,还有一个额外的列来显示varchar,例如:
Id StartDate StartDateStatus
1 (null) Awaiting
2 12/12/2009 Approved
3 10/10/2009 Approved
Run Code Online (Sandbox Code Playgroud)
我的选择中有以下内容,但它似乎不起作用.Approved
即使日期有一些空值,所有状态都会设置为
select
id,
StartDate,
CASE StartDate
WHEN null THEN 'Awaiting'
ELSE 'Approved' END AS StartDateStatus
FROM myTable
Run Code Online (Sandbox Code Playgroud)
我的查询结果如下:
Id StartDate StartDateStatus
1 (null) Approved
2 12/12/2009 Approved
3 10/10/2009 Approved
4 (null) Approved
5 (null) Approved
Run Code Online (Sandbox Code Playgroud)
StartDate是一个smalldatetime
,应该如何处理它有一些例外吗?
谢谢
我有一个名为Country的对象.在程序的某个时刻,我想设置每个对象的场强.
每个国家的权力是固定的,我在一张纸上有所有196个国家的数据.例如,我的代码应该检查国家/地区的名称是否为USA(如果是,则将其功率设置为100),依此类推.
我知道我可以用开关盒做到这一点,但是最好,最好,最有效的方法是什么?
这是处理c#switch语句的合适方法还是需要显式中断? 参考
public static string ToRegistryString(AliceKey.AliceKeyPaths aliceKeyPath)
{
switch (aliceKeyPath)
{
case AliceKey.AliceKeyPaths.NET_CLR_DATA:
return @"\.NET CLR Data\";
case AliceKey.AliceKeyPaths.NET_CLR_NETWORKING:
return @"\.NET CLR Networking\";
case AliceKey.AliceKeyPaths.NET_DATA_PROVIDER_MSSQL:
return @"\.NET Data Provider for SqlServer\";
case AliceKey.AliceKeyPaths.NET_DATA_PROVIDER_ORACLE:
return @"\.NET Data Provider for Oracle\";
}
return new string(new char[0]);
}
Run Code Online (Sandbox Code Playgroud)