• MySQL基础之使用数据处理函数


    函数

    SQL支持利用函数来处理数据。函数一般是在数据上执行的。它给数据的转换和处理提供了方便

    函数没有SQL的可移植性强

    能运行在多个系统上的代码称为可移植的, 相对来说, 多数SQL语句是可移植的, 在SQL实现之间有差异时, 这些差异通常不难处理。

    而函数的可移植性却不强, 几乎每种DBMS的实现都支持其他实现不支持的函数。而且有时差异还很大。

    为了代码的可移植性, 不赞成使用特殊实现的功能。

    使用函数

    大多少SQL实现支持以下类型的函数

    • 用于处理文本(如删除或填充, 转换值的大小写)的文本函数
    • 用于在数值数据上进行算术运算(如返回绝对值、进行代数运算)的数值函数
    • 用于处理日期和时间值并从这些值中提取特定成分(例如, 返回两个日期之差, 检查日期有效性等)的日期和时间函数
    • 返回DBMS正使用的特殊信息(如返回用户登录信息、检查版本细节)的系统函数

    文本处理函数

    使用RTrim()函数来去除列值右边的空格, 这是已经介绍过的文本函数。

    下面是另一个例子, 使用Upper()函数。

    MariaDB [crashcourse]> SELECT vend_name, Upper(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name;
    +----------------+------------------+
    | vend_name      | vend_name_upcase |
    +----------------+------------------+
    | ACME           | ACME             |
    | Anvils R Us    | ANVILS R US      |
    | Furball Inc.   | FURBALL INC.     |
    | Jet Set        | JET SET          |
    | Jouets Et Ours | JOUETS ET OURS   |
    | LT Supplies    | LT SUPPLIES      |
    +----------------+------------------+
    6 rows in set (0.004 sec)
    
    MariaDB [crashcourse]> 

    Upper()可以将文本转换成大写。

    表中列出了某些常用的文本处理函数。

    SOUNDEX是一个将任何文本串转换为描述其语言表示的字母数字模式的算法。SOUNDEX考虑了类似的发音字符和音节, 使得能对串进行发音比较而不是字母比较。如下所示:

    MariaDB [crashcourse]> SELECT cust_name, cust_contact FROM customers WHERE Soundex(cust_contact) = Soundex('Y Lie');
    +-------------+--------------+
    | cust_name   | cust_contact |
    +-------------+--------------+
    | Coyote Inc. | Y Lee        |
    +-------------+--------------+
    1 row in set (0.001 sec)
    
    MariaDB [crashcourse]> 

    因为Y.Lee和Y.Lie的发音相似, 所以他们的SOUNDEX值匹配。因此WHERE子句能正确的过滤出所需的数据。

    日期和时间处理函数

    日期和时间采用相应的数据类型和特殊的格式存储, 以便能快速和有效的排序或过滤, 并且节省物理存储空间

    一般,应用程序不使用用来存储日期和时间的格式,因此日期和时间函数总是被用来读取、统计和处理这些值。

    一些常用的日期和时间处理函数

    首先需要注意的是MySQL使用的日期格式。无论什么时候指定了一个日期, 不管是插入或是更新表值还是使用WHERE子句进行过滤。日期必须为格式yyy-mm-dd。

    基本的日期比较很简单

    MariaDB [crashcourse]> SELECT cust_id, order_num FROM orders WHERE order_date = '2005-09-01';
    +---------+-----------+
    | cust_id | order_num |
    +---------+-----------+
    |   10001 |     20005 |
    +---------+-----------+
    1 row in set (0.002 sec)
    
    MariaDB [crashcourse]> 

    但是使用"WHERE order_date = '2005-09-01'"这种比较是不可靠的, 如果order_date的值为"order_date = '2005-09-0 11:30:05' "则不会被匹配出来。

    解决办法是使用Date()函数, Date函数(order_date)指示MySQL仅提取列的日期部分, 更可靠的SELECT语句为:

    MariaDB [crashcourse]> SELECT cust_id, order_num FROM orders WHERE Date(order_date) = '2005-09-01';
    +---------+-----------+
    | cust_id | order_num |
    +---------+-----------+
    |   10001 |     20005 |
    +---------+-----------+
    1 row in set (0.001 sec)
    
    MariaDB [crashcourse]> 

    还有一种日期比较的方法, 如果想检索出2005年9月下的所有订单。

    方法一: 使用BETWEEN将2005-09-01和2005-09-30定义成一个要匹配的日期范围

    MariaDB [crashcourse]> SELECT cust_id, order_num FROM orders WHERE Date(order_date) BETWEEN '2005-09-01' AND '2005-09-30';
    +---------+-----------+
    | cust_id | order_num |
    +---------+-----------+
    |   10001 |     20005 |
    |   10003 |     20006 |
    |   10004 |     20007 |
    +---------+-----------+
    3 rows in set (0.001 sec)
    
    MariaDB [crashcourse]> 

    方法二: 使用函数

    MariaDB [crashcourse]> SELECT cust_id, order_num FROM orders WHERE Year(order_date)=2005 AND Month(order_date)=9;
    +---------+-----------+
    | cust_id | order_num |
    +---------+-----------+
    |   10001 |     20005 |
    |   10003 |     20006 |
    |   10004 |     20007 |
    +---------+-----------+
    3 rows in set (0.000 sec)
    
    MariaDB [crashcourse]> 

    数值处理函数

    数值处理函数仅处理数值数据,这些函数一般主要用于代数、三角或几何运算。

    在主要的DMBS中, 数值函数是最一致最统一的函数。如下列举出常用的数值处理函数

  • 相关阅读:
    node-webkit 笔记
    CEF 相关资料
    输出重定向
    FindProcDLL::FindProc 和 KillProcDLL::KillProc,必须使用WPF x86编译出来的程序
    wpf xaml inlines
    Gradle 笔记
    Android手机的 storage
    SpringMVC 工作原理详解
    SpringMVC 面试题
    18、多线程 (线程安全、线程同步、等待唤醒机制、单例设计模式)
  • 原文地址:https://www.cnblogs.com/featherwit/p/13374146.html
Copyright © 2020-2023  润新知