【数据库】函数,谓词(LIKE,BETWEEN,IN),CASE

2024-03-24 21:30

本文主要是介绍【数据库】函数,谓词(LIKE,BETWEEN,IN),CASE,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

6.1函数
算术函数
6.1 创建表格:

postgres=# CREATE TABLE SampleMath
postgres-# (m NUMERIC (10,3),
postgres(# n INTEGER,
postgres(# p INTEGER);
CREATE TABLE
postgres=# BEGIN TRANSACTION;
BEGIN
postgres=# INSERT INTO SampleMath(m, n, p) VALUES (500,  0,    NULL);
INSERT 0 1
postgres=# INSERT INTO SampleMath(m, n, p) VALUES (-180, 0,    NULL);
INSERT 0 1
postgres=# INSERT INTO SampleMath(m, n, p) VALUES (NULL, NULL, NULL);
INSERT 0 1
postgres=# INSERT INTO SampleMath(m, n, p) VALUES (NULL, 7,    3);
INSERT 0 1
postgres=# INSERT INTO SampleMath(m, n, p) VALUES (NULL, 5,    2);
INSERT 0 1
postgres=# INSERT INTO SampleMath(m, n, p) VALUES (NULL, 4,    NULL);
INSERT 0 1
postgres=# INSERT INTO SampleMath(m, n, p) VALUES (8,    NULL, 3);
INSERT 0 1
postgres=# INSERT INTO SampleMath(m, n, p) VALUES (2.27, 1,    NULL);
INSERT 0 1
postgres=# INSERT INTO SampleMath(m, n, p) VALUES (5.555,2,    NULL);
INSERT 0 1
postgres=# INSERT INTO SampleMath(m, n, p) VALUES (NULL, 1,    NULL);
INSERT 0 1
postgres=# INSERT INTO SampleMath(m, n, p) VALUES (8.76, NULL, NULL);
INSERT 0 1
postgres=# COMMIT;
COMMIT
postgres=# SELECT * FROM SampleMath;m     | n | p
----------+---+---500.000 | 0 |-180.000 | 0 ||   || 7 | 3| 5 | 2| 4 |8.000 |   | 32.270 | 1 |5.555 | 2 || 1 |8.760 |   |
(11 行记录)

6.2 求绝对值

postgres=# SELECT m,
postgres-# ABS(m) AS abs_col
postgres-# FROM SampleMath;m     | abs_col
----------+---------500.000 | 500.000-180.000 | 180.000||||8.000 |   8.0002.270 |   2.2705.555 |   5.555|8.760 |   8.760
(11 行记录)

6.3 求余数MOD

postgres=# SELECT n,p,
postgres-# MOD(n,p) AS mod_col
postgres-# FROM SampleMath;n | p | mod_col
---+---+---------0 |   |0 |   ||   |7 | 3 |       15 | 2 |       14 |   || 3 |1 |   |2 |   |1 |   ||   |
(11 行记录)

6.4 ROUND四舍五入,m时待处理数据,n是四舍五入之后的位数

postgres=# SELECT m,n,
postgres-# ROUND(m,n) AS round_col
postgres-# FROM SampleMath;m     | n | round_col
----------+---+-----------500.000 | 0 |       500-180.000 | 0 |      -180|   || 7 || 5 || 4 |8.000 |   |2.270 | 1 |       2.35.555 | 2 |      5.56| 1 |8.760 |   |
(11 行记录)

6.5 创建字符串表

postgres=# CREATE TABLE SampleStr
postgres-# (str1  VARCHAR(40),
postgres(#  str2  VARCHAR(40),
postgres(#  str3  VARCHAR(40));
CREATE TABLE
postgres=# BEGIN TRANSACTION;
BEGIN
postgres=# INSERT INTO SampleStr (str1, str2, str3) VALUES ('opx',        'rt',NULL);
INSERT 0 1
postgres=# INSERT INTO SampleStr (str1, str2, str3) VALUES ('abc','def',NULL);
INSERT 0 1
postgres=# INSERT INTO SampleStr (str1, str2, str3) VALUES ('山田',' 太郎'  ,'是我');
INSERT 0 1
postgres=# INSERT INTO SampleStr (str1, str2, str3) VALUES ('aaa',NULL    ,NULL);
INSERT 0 1
postgres=# INSERT INTO SampleStr (str1, str2, str3) VALUES (NULL,'xyz',        NULL);
INSERT 0 1
postgres=# INSERT INTO SampleStr (str1, str2, str3) VALUES ('@!#$%',NULL,NULL);
INSERT 0 1
postgres=# INSERT INTO SampleStr (str1, str2, str3) VALUES ('ABC',NULL,NULL);
INSERT 0 1
postgres=# INSERT INTO SampleStr (str1, str2, str3) VALUES ('aBC',NULL,NULL);
INSERT 0 1
postgres=# INSERT INTO SampleStr (str1, str2, str3) VALUES ('abc太郎','abc','ABC');
INSERT 0 1
postgres=# INSERT INTO SampleStr (str1, str2, str3) VALUES ('abcdefabc',   'abc','ABC');
INSERT 0 1
postgres=# INSERT INTO SampleStr (str1, str2, str3) VALUES ('micmic',      'i',        'I');;
INSERT 0 1
postgres=# COMMIT;
COMMIT
postgres=# SELECT * FROM SampleStr;str1    | str2 | str3
-----------+------+------opx       | rt   |abc       | def  |山田      | 太郎 | 是我aaa       |      || xyz  |@!#$%     |      |ABC       |      |aBC       |      |abc太郎   | abc  | ABCabcdefabc | abc  | ABCmicmic    | i    | I
(11 行记录)

6.6 字符串拼接||

postgres=# SELECT str1,str2,
postgres-# str1||str2 AS str_concat
postgres-# FROM SampleStr;str1    | str2 |  str_concat
-----------+------+--------------opx       | rt   | opxrtabc       | def  | abcdef山田      | 太郎 | 山田太郎aaa       |      || xyz  |@!#$%     |      |ABC       |      |aBC       |      |abc太郎   | abc  | abc太郎abcabcdefabc | abc  | abcdefabcabcmicmic    | i    | micmici
(11 行记录)

6.7 拼接三个字符串

postgres=# SELECT str1,str2,str3,
postgres-# str1||str2||str3 AS str_concat
postgres-# FROM SampleStr
postgres-# WHERE str1='山田';str1 | str2 | str3 |  str_concat
------+------+------+--------------山田 | 太郎 | 是我 | 山田太郎是我
(1 行记录)

6.8 计算字符串长度LENGTH

postgres=# SELECT str1,
postgres-# LENGTH(str1) AS length_str
postgres-# FROM SampleStr;str1    | length_str
-----------+------------opx       |          3abc       |          3山田      |          2aaa       |          3|@!#$%     |          5ABC       |          3aBC       |          3abc太郎   |          5abcdefabc |          9micmic    |          6
(11 行记录)

6.9 大小写转换 LOWER UPPER

postgres=# SELECT str1,
postgres-# LOWER(str1) AS low_str
postgres-# FROM SampleStr;str1    |  low_str
-----------+-----------opx       | opxabc       | abc山田      | 山田aaa       | aaa|@!#$%     | @!#$%ABC       | abcaBC       | abcabc太郎   | abc太郎abcdefabc | abcdefabcmicmic    | micmic
(11 行记录)

6.10 替换字符串REPLACE(对象字符串,替换前,替换后)

postgres=# SELECT str1,str2,str3,
postgres-# REPLACE(str1,str2,str3) AS replace_str
postgres-# FROM SampleStr;str1    | str2 | str3 | replace_str
-----------+------+------+-------------opx       | rt   |      |abc       | def  |      |山田      | 太郎 | 是我 | 山田aaa       |      |      || xyz  |      |@!#$%     |      |      |ABC       |      |      |aBC       |      |      |abc太郎   | abc  | ABC  | ABC太郎abcdefabc | abc  | ABC  | ABCdefABCmicmic    | i    | I    | mIcmIc
(11 行记录)

6.11 字符串的截取SUBSTRING(对象字符串 FROM 第几位 FRO 截取长度)

postgres=# SELECT str1,
postgres-# SUBSTRING(str1 FROM 3 FOR 2) AS subs_str
postgres-# FROM SampleStr;str1    | subs_str
-----------+----------opx       | xabc       | c山田      |aaa       | a|@!#$%     | #$ABC       | CaBC       | Cabc太郎   | c太abcdefabc | cdmicmic    | cm
(11 行记录)

日期函数:
6.13 获得当前日期CURRENT_DATE

postgres=# SELECT CURRENT_DATE
postgres-# ;date
------------2021-04-14
(1 行记录)

6.14获取当前时间 CURRENT_TIME

postgres=# SELECT CURRENT_TIME;timetz
--------------------11:18:22.191069+08
(1 行记录)

6.15 获取当前的日期和时间 CURRENT_TIMESTAMP

postgres=# SELECT CURRENT_TIMESTAMP;now
-------------------------------2021-04-14 11:19:16.623151+08
(1 行记录)

6.16 截取日期元素

postgres=# SELECT CURRENT_TIMESTAMP,
postgres-# EXTRACT(YEAR FROM CURRENT_TIMESTAMP) AS year,
postgres-# EXTRACT(MONTH FROM CURRENT_TIMESTAMP) AS month;now              | year | month
-------------------------------+------+-------2021-04-14 11:25:10.543004+08 | 2021 |     4
(1 行记录)

转换函数
6.17 数据类型转换CAST
格式:CAST(待转换对象 AS 转换后的数据类型)

postgres=# SELECT CAST('0001' AS INTEGER) AS int_col;int_col
---------1
(1 行记录)

6.18 将字符串转换为日期类型

postgres=# SELECT CAST('2009-12-11' AS DATE) AS date_col;date_col
------------2009-12-11
(1 行记录)

6.19 将NULL值转换为其他值COALESCE
返回COALESCE括号内第一个不为0的索引。

postgres=# SELECT COALESCE(NULL,1) AS col_1,
postgres-# COALESCE(2) AS col_2,
postgres-# COALESCE(NULL,NULL,NULL,NULL,4) AS col_3;col_1 | col_2 | col_3
-------+-------+-------1 |     2 |     4
(1 行记录)

6.20 COALESCE作用于某一列

postgres=# SELECT COALESCE(str2,'大哥')
postgres-# FROM SampleStr;coalesce
----------rtdef太郎大哥xyz大哥大哥大哥abcabci
(11 行记录)

6.2 谓词
6.21创建SampleLike表

postgres=# CREATE TABLE SampleLike
postgres-# (strcol VARCHAR(6) NOT NULL,
postgres(# PRIMARY KEY (strcol));
CREATE TABLE
postgres=# BEGIN TRASACTION;
错误:  语法错误 在 "TRASACTION" 或附近的
第1BEGIN TRASACTION;^
postgres=# BEGIN TRANSACTION;
BEGIN
postgres=# INSERT INTO SampleLike (strcol) VALUES ('abcddd');
INSERT 0 1
postgres=# INSERT INTO SampleLike (strcol) VALUES ('dddabc');
INSERT 0 1
postgres=# INSERT INTO SampleLike (strcol) VALUES ('abdddc');
INSERT 0 1
postgres=# INSERT INTO SampleLike (strcol) VALUES ('abcdd');
INSERT 0 1
postgres=# INSERT INTO SampleLike (strcol) VALUES ('ddabc');
INSERT 0 1
postgres=# INSERT INTO SampleLike (strcol) VALUES ('abddc');
INSERT 0 1
postgres=# COMMIT;
COMMITpostgres=# SELECT * FROM SampleLike;strcol
--------abcddddddabcabdddcabcddddabcabddc
(6 行记录)

6.22 用LIKE语句做前方一致查询

postgres=# SELECT *
postgres-# FROM SampleLike
postgres-# WHERE strcol LIKE 'ddd%';strcol
--------dddabc
(1 行记录)

注:%表示任意字符串
6.22 中间一致查询

postgres=# SELECT * FROM SampleLike
postgres-# WHERE strcol LIKE '%ddd%';strcol
--------abcddddddabcabdddc
(3 行记录)

注:中间的查询结果包含前后
6.23 后方一致查询

postgres=# SELECT * FROM SampleLike
postgres-# WHERE strcol LIKE '%ddd';strcol
--------abcddd
(1 行记录)

6.26 用下划线表示任意一个字符

postgres=# SELECT * FROM SampleLike
postgres-# WHERE strcol LIKE '___dd';strcol
--------abcdd
(1 行记录)

6.27 选取销售单价在100-5000之间的商品BETWEEN

postgres=# SELECT product_name,sale_price
postgres-# FROM Product
postgres-# WHERE sale_price BETWEEN 100 AND 5000;product_name | sale_price
--------------+------------T恤          |       1000打孔器       |        500运动T恤      |       4000菜刀         |       3000叉子         |        500擦菜板       |        880圆珠笔       |        100
(7 行记录)

注:默认是闭区间,想要开区间,在数据前加<或>
6.29 选取进价为NULL的数据 ISNULL

postgres=# SELECT product_name,purchase_price
postgres-# FROM Product
postgres-# WHERE purchase_price ISNULL;product_name | purchase_price
--------------+----------------叉子         |圆珠笔       |
(2 行记录)

6.30 选取不为NULL的数据 IS NOT NULL

postgres=# SELECT product_name,purchase_price
postgres-# FROM Product
postgres-# WHERE purchase_price IS NOT NULL;product_name | purchase_price
--------------+----------------T恤          |            500打孔器       |            320运动T恤      |           2800菜刀         |           2800高压锅       |           5000擦菜板       |            790
(6 行记录)

注:注意写法,中间有空格
6.32 用IN 指定多个具体的数据

postgres=# SELECT product_name,purchase_price
postgres-# FROM Product
postgres-# WHERE purchase_price IN (500,320,790);product_name | purchase_price
--------------+----------------T恤          |            500打孔器       |            320擦菜板       |            790
(3 行记录)

6.33 返回不在IN集合的数据

postgres=# SELECT product_name,purchase_price
postgres-# FROM Product
postgres-# WHERE purchase_price NOT IN (500,320,790);product_name | purchase_price
--------------+----------------运动T恤      |           2800菜刀         |           2800高压锅       |           5000
(3 行记录)

注:NULL 数据不参与
6.34 创建ShopProduct表

postgres=# SELECT * FROM ShopProduct;shop_id | shop_name | product_id | quantity
---------+-----------+------------+----------000A    | 东京      | 0001       |       30000A    | 东京      | 0002       |       50000A    | 东京      | 0003       |       15000B    | 名古屋    | 0002       |       30000B    | 名古屋    | 0003       |      120000B    | 名古屋    | 0004       |       20000B    | 名古屋    | 0006       |       10000B    | 名古屋    | 0007       |       40000C    | 大阪      | 0003       |       20000C    | 大阪      | 0004       |       50000C    | 大阪      | 0006       |       90000C    | 大阪      | 0007       |       70000D    | 福冈      | 0001       |      100
(13 行记录)

6.36 使用子查询作为IN的参数

postgres=# SELECT product_name,sale_price
postgres-# FROM Product
postgres-# WHERE product_id IN (SELECT product_id FROM ShopProduct
postgres(# WHERE shop_name='大阪');product_name | sale_price
--------------+------------叉子         |        500擦菜板       |        880运动T恤      |       4000菜刀         |       3000
(4 行记录)

注:EXIST了解,多数情况下可以用IN代替

6.41 通过CASE语句给种类加ABC

postgres=# SELECT product_name,
postgres-# CASE WHEN product_type='衣服'
postgres-# THEN 'A:'|| product_type
postgres-# WHEN product_type='办公用品'
postgres-# THEN 'B:'|| product_type
postgres-# WHEN product_type='厨房用具'
postgres-# THEN 'C:'|| product_type
postgres-# ELSE NULL
postgres-# END AS nayilie
postgres-# FROM Product;product_name |  nayilie
--------------+------------T恤          | A:衣服打孔器       | B:办公用品运动T恤      | A:衣服菜刀         | C:厨房用具高压锅       | C:厨房用具叉子         | C:厨房用具擦菜板       | C:厨房用具圆珠笔       | B:办公用品
(8 行记录)

6.43 CASE表达式进行列转换

postgres=# SELECT SUM(CASE WHEN product_type='衣服'
postgres(# THEN sale_price ELSE 0 END) AS clothes,
postgres-# SUM(CASE WHEN product_type='厨房用具'
postgres(# THEN sale_price ELSE 0 END) AS kitchen,
postgres-# SUM(CASE WHEN product_type='办公用品'
postgres(# THEN sale_price ELSE 0 END) AS office
postgres-# FROM Product;clothes | kitchen | office
---------+---------+--------5000 |   11180 |    600
(1 行记录)

练习:
6.1 计算执行结果
在这里插入图片描述

 product_name | purchase_price
--------------+----------------
(0 行记录)

注:IN 无法选取NULL或者NOT NULL数据。
6.2 CASE问题
在这里插入图片描述

postgres=# SELECT SUM(CASE WHEN sale_price <= 1000 THEN 1 ELSE 0 END)               AS low_price,
postgres-#        SUM(CASE WHEN sale_price BETWEEN 1001 AND 3000 THEN 1 ELSE 0 END) AS mid_price,
postgres-#        SUM(CASE WHEN sale_price >= 3001 THEN 1 ELSE 0 END)               AS high_price
postgres-#  FROM Product;low_price | mid_price | high_price
-----------+-----------+------------5 |         1 |          2
(1 行记录)

这篇关于【数据库】函数,谓词(LIKE,BETWEEN,IN),CASE的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/842840

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

Mybatis中的like查询

<if test="templateName != null and templateName != ''">AND template_name LIKE CONCAT('%',#{templateName,jdbcType=VARCHAR},'%')</if>

DM8数据库安装后配置

1 前言 在上篇文章中,我们已经成功将库装好。在安装完成后,为了能够更好地满足应用需求和保障系统的安全稳定运行,通常需要进行一些基本的配置。下面是一些常见的配置项: 数据库服务注册:默认包含14个功能模块,将这些模块注册成服务后,可以更好的启动和管理这些功能;基本的实例参数配置:契合应用场景和发挥系统的最大性能;备份:有备无患;… 2 注册实例服务 注册了实例服务后,可以使用系统服务管理,

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

开源分布式数据库中间件

转自:https://www.csdn.net/article/2015-07-16/2825228 MyCat:开源分布式数据库中间件 为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代。如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷。 MyCat的目标就是:低成本地将现有的单机数据库和应用平滑迁移到“云”端