`
hudeyong926
  • 浏览: 2028324 次
  • 来自: 武汉
社区版块
存档分类
最新评论

使用CASE WHEN进行字符串替换处理

阅读更多
/*
mysql> select * from sales;
+-----+------------+--------+--------+--------+------+------------+
| num | name       | winter | spring | summer | fall | category   |
+-----+------------+--------+--------+--------+------+------------+
|   1 | Java       |   1067 |    200 |    150 |  267 | Holiday    |
|   2 | C          |    970 |    770 |    531 |  486 | Profession |
|   3 | JavaScript |     53 |     13 |     21 |  856 | Literary   |
|   4 | SQL        |    782 |    357 |    168 |  250 | Profession |
|   5 | Oracle     |    589 |    795 |    367 |  284 | Holiday    |
|   6 | MySQL      |    953 |    582 |    336 |  489 | Literary   |
|   7 | Cplus      |    752 |    657 |    259 |  478 | Literary   |
|   8 | Python     |     67 |     23 |     83 |  543 | Holiday    |
|   9 | PHP        |    673 |     48 |    625 |   52 | Profession |
+-----+------------+--------+--------+--------+------+------------+
9 rows in set (0.01 sec)

mysql> SELECT name AS Name,
    -> CASE category
    -> WHEN "Holiday" THEN "Seasonal"
    -> WHEN "Profession" THEN "Bi_annual"
    -> WHEN "Literary" THEN "Random" END AS "Pattern"
    -> FROM sales;
+------------+-----------+
| Name       | Pattern   |
+------------+-----------+
| Java       | Seasonal  |
| C          | Bi_annual |
| JavaScript | Random    |
| SQL        | Bi_annual |
| Oracle     | Seasonal  |
| MySQL      | Random    |
| Cplus      | Random    |
| Python     | Seasonal  |
| PHP        | Bi_annual |
+------------+-----------+
9 rows in set (0.00 sec)
*/
Drop table sales;
  
CREATE TABLE sales(
    num MEDIUMINT NOT NULL AUTO_INCREMENT,
    name CHAR(20),
    winter INT,
    spring INT,
    summer INT,
    fall INT,
    category CHAR(13),
    primary key(num)
)type=MyISAM;

insert into sales value(1, 'Java', 1067 , 200, 150, 267,'Holiday');
insert into sales value(2, 'C',970,770,531,486,'Profession');
insert into sales value(3, 'JavaScript',53,13,21,856,'Literary');
insert into sales value(4, 'SQL',782,357,168,250,'Profession');
insert into sales value(5, 'Oracle',589,795,367,284,'Holiday');
insert into sales value(6, 'MySQL',953,582,336,489,'Literary');
insert into sales value(7, 'Cplus',752,657,259,478,'Literary');
insert into sales value(8, 'Python',67,23,83,543,'Holiday');
insert into sales value(9, 'PHP',673,48,625,52,'Profession');

select * from sales;

SELECT name AS Name,
CASE category
WHEN "Holiday" THEN "Seasonal"
WHEN "Profession" THEN "Bi_annual"
WHEN "Literary" THEN "Random" END AS "Pattern"
FROM sales;   

简单语句

SELECT CASE WHEN 10*2=30 THEN '30 correct'
   WHEN 10*2=40 THEN '40 correct'
   ELSE 'Should be 10*2=20'
END;
//不够60秒的算一分钟,
SELECT case MOD(70,60) when 0 then floor(70/60) ELSE floor(70/60)+1 end;

多重表达式

SELECT CASE 10*2
   WHEN 20 THEN '20 correct'
   WHEN 30 THEN '30 correct'
   WHEN 40 THEN '40 correct'
END;

在SELECT查询中使用CASE WHEN

/*
mysql> SELECT Name, RatingID AS Rating,
    ->    CASE RatingID
    ->       WHEN 'R' THEN 'Under 17 requires an adult.'
    ->       WHEN 'X' THEN 'No one 17 and under.'
    ->       WHEN 'NR' THEN 'Use discretion when renting.'
    ->       ELSE 'OK to rent to minors.'
    ->    END AS Policy
    -> FROM DVDs
    -> ORDER BY Name;
+-----------+--------+------------------------------+
| Name      | Rating | Policy                       |
+-----------+--------+------------------------------+
| Africa    | PG     | OK to rent to minors.        |
| Amadeus   | PG     | OK to rent to minors.        |
| Christmas | NR     | Use discretion when renting. |
| Doc       | G      | OK to rent to minors.        |
| Falcon    | NR     | Use discretion when renting. |
| Mash      | R      | Under 17 requires an adult.  |
| Show      | NR     | Use discretion when renting. |
| View      | NR     | Use discretion when renting. |
+-----------+--------+------------------------------+
8 rows in set (0.01 sec)
*/

Drop table DVDs;

CREATE TABLE DVDs (
   ID SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   Name VARCHAR(60) NOT NULL,
   NumDisks TINYINT NOT NULL DEFAULT 1,
   RatingID VARCHAR(4) NOT NULL,
   StatID CHAR(3) NOT NULL
)
ENGINE=INNODB;

INSERT INTO DVDs (Name, NumDisks, RatingID, StatID)
VALUES ('Christmas', 1, 'NR', 's1'),
       ('Doc',       1, 'G',  's2'),
       ('Africa',    1, 'PG', 's1'),
       ('Falcon',    1, 'NR', 's2'),
       ('Amadeus',   1, 'PG', 's2'),
       ('Show',      2, 'NR', 's2'),
       ('View',      1, 'NR', 's1'),
       ('Mash',      2, 'R',  's2');
  

SELECT Name, RatingID AS Rating,
   CASE RatingID
      WHEN 'R' THEN 'Under 17 requires an adult.'
      WHEN 'X' THEN 'No one 17 and under.'
      WHEN 'NR' THEN 'Use discretion when renting.'
      ELSE 'OK to rent to minors.'
   END AS Policy
FROM DVDs
ORDER BY Name;

#表的创建
CREATE TABLE `lee` (
`id` int(10) NOT NULL AUTO_INCREMENT, 
`name` char(20) DEFAULT NULL, 
`birthday` datetime DEFAULT NULL, 
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

#数据插入:
insert into lee(name,birthday) values ('sam','1990-01-01');
insert into lee(name,birthday) values ('lee','1980-01-01');
insert into lee(name,birthday) values ('john','1985-01-01');


#使用case when语句
select name,
 case
        when birthday<'1981' then 'old'
        when birthday>'1988' then 'yong'
        else 'ok' END YORN
from lee;
 
select NAME,
 case name
     when 'sam' then 'yong'
        when 'lee' then 'handsome'
        else 'good' end
from lee;
#当然了case when语句还可以复合

select name,birthday,
 case
     when birthday>'1983' then 'yong'
        when name='lee' then 'handsome'
        else 'just so so ' end
from lee;

#在这里用sql语句进行日期比较的话,需要对年加引号。要不然可能结果可能和预期的结果会不同。我的mysql版本5.1

#当然也可以用year函数来实现,以第一个sql为例

select NAME,
 CASE
     when year(birthday)>1988 then 'yong'
        when year(birthday)<1980 then 'old'
        else 'ok' END
from lee;

create table penalties
(
 paymentno INTEGER not NULL,
    payment_date DATE not null,
    amount DECIMAL(7,2) not null,
    primary key(paymentno)
)

insert into penalties values(1,'2008-01-01',3.45);
insert into penalties values(2,'2009-01-01',50.45);
insert into penalties values(3,'2008-07-01',80.45);

#对罚款登记分为三类,第一类low,包括大于0小于等于40的罚款,第二类moderate大于40
#到80之间的罚款,第三类high包含所有大于80的罚款。
#统计出属于low的罚款编号。

#第一道题的解法与上面的相同
select paymentno,amount,
 case
     when amount>0 and amount<=40 then 'low'
        when amount>40 and amount<=80 then 'moderate'
        when amount>80 then 'high'
        else 'incorrect' end lvl
from `penalties`

#统计出属于low的罚款编号。重点看这里的解决方法
#方法1.
select paymentno,amount
from `penalties`
where case
 when amount>0 and  amount<=40 then 'low'
    when amount>40 and amount<=80 then 'moderate'
    when amount>80 then 'high'
    else 'incorrect' end ='low';

#方法2
select *
from (select paymentno,amount,
 case
     when amount>0 and amount<=40 then 'low'
        when amount>40 and amount<=80 then 'moderate'
        when amount>80 then 'high'
        else 'incorrect' end lvl
from `penalties`) as p
where p.lvl='low';
分享到:
评论

相关推荐

    字符串处理示例_pgsql_

    本示例将聚焦于PostgreSQL中的字符串处理函数以及`CASE WHEN`语句的运用。 一、字符串处理函数 1. `length(str)`:返回字符串`str`的长度,以字符为单位。 2. `lower(str)` / `upper(str)`:将字符串转换为小写或...

    oracle 如何判断一个字符串能否转换为数字?

    可以使用`TRANSLATE`函数将所有可能的数字字符(包括小数点、正负号和科学计数法中的“E”或“e”)替换为固定的字符,然后比较替换后字符串的大小,以此来判断原字符串是否可以转换为数字。 **步骤**: 1. **定义...

    MySQL的CASE WHEN语句的几个使用实例

    首先,我们来看一个简单的使用CASE WHEN进行字符串替换的例子。在这个示例中,我们有一个名为sales的表,其中包含了category字段,分别有"Holiday", "Profession", 和"Literary"三个类别。我们可以使用CASE WHEN来将...

    greenplum常用函数-基础

    字符串函数在进行文本数据处理时非常有用,可以帮助我们转换、格式化数据,以便更好地进行数据清洗和分析。 在业务实践中,遇到问题并解决问题是提升技能的重要途径。在Greenplum使用过程中,可能会碰到数据倾斜、...

    Oracle sql文总结(case when,查看执行计画,文本操作,查看锁表及解锁,游标)

    Oracle提供了一系列函数来处理字符串,如`SUBSTR`用于提取子串,`INSTR`用于查找子串的位置,`REPLACE`用于替换字符串中的子串,`TRIM`用于去除字符串两端的空格等。例如: ```sql SELECT SUBSTR(column, start_...

    Oracle用decode函数或CASE-WHEN实现自定义排序

    另一种实现自定义排序的方法是使用`CASE-WHEN`语句,它可以更灵活地进行条件判断。例如: ```sql SELECT * FROM table_date ORDER BY ( CASE DateStr WHEN 'Monday' THEN 1 WHEN 'Tuesday' THEN 2 WHEN '...

    字符型数据转换为数值型.rar

    - R语言中,可以使用`is.na()`检查缺失值,使用`ifelse()`或`case_when()`函数进行条件转换。 - SQL中,`IS NULL`检查语句用于识别空值,然后使用`COALESCE()`或`IFNULL()`函数来处理。 4. **进制转换**: - ...

    ABAP基础开发PPT学习教案.pptx

    * replace:用其他字符串在字符内替换指定字符串。 * strlen:用于确定字符实际长度。 * condense:用于清除字符内多余的空格。 六、结构语句 ABAP中,结构语句包括: * IF语句:IF &lt;condition1&gt; …… ELSEIF ...

    sql_函数大全_比较常用的一些函数整理.pdf

    以上知识点涵盖了比较常用的一些SQL函数,分别针对字符串处理、数值运算、数据类型转换、日期时间处理和条件逻辑等各个方面,这些函数是进行数据库查询和数据处理时不可或缺的工具。在实际开发过程中,熟练掌握这些...

    Oracle与Mysql差异说明.doc

    7. 字符串连接:Oracle 使用 "||" 符号进行字符串连接,而 MySQL 使用 CONCAT 函数。 8. 视图创建:Oracle 允许在创建视图时指定 `WITH READ ONLY`,MySQL 不支持这一选项。 9. 子查询别名:在 MySQL 中,如果子...

    sql高级进阶

    - 对字符串为的部分子串中中的字符进行替换:使用REPLACE函数进行字符替换。 6. 使用数字 - 常用聚集函数:介绍SUM、AVG、MAX、MIN等聚集函数的使用。 - 生成累计和:利用数据库窗口函数实现累计求和。 - 计算...

    Oracle数据库中对null值的排序及mull与空字符串的区别

    在这种情况下,理解并正确处理null值的排序和null与空字符串的区别至关重要,以确保查询结果符合预期。 总的来说,Oracle数据库提供了多种方式来处理null值的排序,包括`NVL`、`DECODE`、`NULLS FIRST/LAST`和`CASE...

    XSLT Cookbook

    例如,可以使用`substring`函数结合字符串长度进行比较。假设我们要检查字符串`s`是否以子串`suffix`结尾: ```xslt &lt;xsl:when test="string-length($s) - string-length($suffix) &gt;= 0 and substring($s, ...

    DataStage_Transformer常用函数

    - `REGEXP_REPLACE()`: 使用正则表达式替换字符串中的模式。 掌握这些DataStage Transformer的常用函数,将有助于在实际工作中进行高效的数据处理。在使用过程中,要注意函数的参数、返回值以及可能产生的错误,...

    Oracle函数大全

    - `REPLACE()`: 在字符串中替换子串。 3. **日期时间函数**: - `SYSDATE`: 当前系统日期。 - `ADD_MONTHS()`: 添加指定的月数到日期。 - `EXTRACT()`: 从日期时间值中提取部分(如年、月、日)。 - `TO_CHAR...

    oracel

    CONCAT用于连接字符串,SUBSTR用于提取字符串的一部分,LENGTH计算字符串长度,INSTR查找子串位置,LPAD和RPAD分别用于左填充和右填充,TRIM用于去除两侧的空格,REPLACE用于替换字符串中的特定字符。 在数字函数中...

    Oracle的110个自带函数总结归纳

    - REPLACE():替换字符串中的指定字符或子串。 - LTRIM()和RTRIM():分别去掉字符串左侧和右侧的空格。 - TRIM():去除字符串两端的空格。 3. 日期时间函数: - SYSDATE:获取当前系统日期。 - CURRENT_DATE:...

    基于python爬虫数据处理(详解)

    在Python中,可以使用内置的字符串方法如`str.replace(old, new)`来替换字符串中的特定字符,`str.strip()`或`str.lstrip()`、`str.rstrip()`来去除首尾空白。对于列表,可以使用`list.remove()`或`list.extend()`等...

Global site tag (gtag.js) - Google Analytics