zoukankan      html  css  js  c++  java
  • 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中, 数值函数是最一致最统一的函数。如下列举出常用的数值处理函数

  • 相关阅读:
    HDU 1269 迷宫城堡
    HDU 4771 Stealing Harry Potter's Precious
    HDU 4772 Zhuge Liang's Password
    HDU 1690 Bus System
    HDU 2112 HDU Today
    HDU 1385 Minimum Transport Cost
    HDU 1596 find the safest road
    HDU 2680 Choose the best route
    HDU 2066 一个人的旅行
    AssetBundle管理机制(下)
  • 原文地址:https://www.cnblogs.com/featherwit/p/13374146.html
Copyright © 2011-2022 走看看