• SQL必知必会 -------- 通配符、计算字段、函数


    1.LIKE操作符

    1.1百分号(%)通配符

    SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE 'Fish%'

    此例子使用了搜索模式'Fish%'。在执行这条子句时,将检索任意以Fish起头的词。%告诉DBMS接受Fish之后的任意字符,不管它有多少字符。

    说明:区分大小写
    根据DBMS的不同及其配置,搜索可以是区分大小写的。如果区分大小写,则'fish%'与Fish bean bag toy就不匹配。

    通配符可在搜索模式中的任意位置使用,并且可以使用多个通配符。下面的例子使用两个通配符,它们位于模式的两端 :
    SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE '%bean bag%' 

    需要特别注意,除了能匹配一个或多个字符外,%还能匹配0个字符。%代表搜索模式中给定位置的0个、1个或多个字符。

    警告:请注意NULL
    通配符%看起来像是可以匹配任何东西,但有个例外,这就是NULL。子句WHERE prod_name LIKE '%'不会匹配产品名称为NULL的行。

    1.2下划线(_)通配符

    SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE '__ inch teddy bear'

    下划线的用途与%一样,但它只匹配单个字符,而不是多个字符。

    1.3方括号([])通配符

    方括号([])通配符用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符。

    说明:并不总是支持集合
    与前面描述的通配符不一样,并不是所有DBMS都支持用来创建集合的[]。只有微软的AccessSQL Server支持集合。为确定你使用的DBMS是否支持集合,请参阅相应的文档。

    SELECT cust_contact
    FROM Customers
    WHERE cust_contact LIKE '[JM]%'
    ORDER BY cust_contact;

    此通配符可以用前缀字符^(脱字号)来否定。 

    2.使用通配符的技巧

    正如所见,SQL的通配符很有用。但这种功能是有代价的,即通配符搜索一般比前面讨论的其他搜索要耗费更长的处理时间。这里给出一些使用通配符时要记住的技巧。

    • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
    • 在确实需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处,搜索起来是最慢的。
    • 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

    总之,通配符是一种极其重要和有用的搜索工具,以后我们经常会用到它。

    3.创建计算字段

    3.1拼接字段

    mysql语法:

    SELECT Concat(vend_name, ' (', vend_country, ')' AS vend_title FROM Vendors
    ORDER BY vend_name;

    concat()主要是去除多余的空格。

    SELECT语句本身与以前使用的相同,只不过这里的计算字段之后跟了文本AS vend_title。它指示SQL创建一个包含指定计算结果的名为vend_title的计算字段。从输出可以看到,结果与以前的相同,但现在列名为vend_title,任何客户端应用都可以按名称引用这个列,就像它是一个实际的表列一样。
    说明:AS通常可选
    在很多DBMS中,AS关键字是可选的,不过最好使用它,这被视为一条最佳实践。
    提示:别名的其他用途
    别名还有其他用途。常见的用途包括在实际的表列名包含不合法的字符(如空格)时重新命名它,在原来的名字含混或容易误解时扩充它。
    警告:别名
    别名既可以是一个单词也可以是一个字符串。如果是后者,字符串应该括在引号中。虽然这种做法是合法的,但不建议这么去做。多单词的名字可读性高,不过会给客户端应用带来各种问题。因此,别名最常见的使用是将多个单词的列名重命名为一个单词的名字。
    说明:导出列
    别名有时也称为导出列(derived column),不管怎么叫,它们所代表的是相同的东西。

    3.2执行算术计算

    计算字段的另一常见用途是对检索出的数据进行算术计算。

    SELECT order_num,
    prod_id,
    quantity,
    item_price,
    quantity*item_price AS expanded_price
    FROM OrderItems
    WHERE order_num = 20008;

    输出中显示的expanded_price列是一个计算字段,此计算为quantity*item_price。

    提示:如何测试计算
    SELECT语句为测试、检验函数和计算提供了很好的方法。虽然SELECT通常用于从表中检索数据,但是省略了FROM子句后就是简单地访问和处理表达式,例如SELECT 3 * 2;将返回6,SELECT Trim(' abc ');将返回abc,SELECT Now();使用Now()函数返回当前日期和时间。现在你明白了,可以根据需要使用SELECT语句进行检验。

    4.使用函数

    4.1文本处理数据

    全部字母变为大写:

    SELECT vend_name, UPPER(vend_name) AS vend_name_upcase
    FROM Vendors
    ORDER BY vend_name;

    可以看到,UPPER()将文本转换为大写,因此本例子中每个供应商都列出两次,第一次为Vendors表中存储的值,第二次作为列vend_name_upcase转换为大写。

    4.2日期和时间处理函数

    这个在不同的数据库中差别比较大

    MySQLMariaDB具有各种日期处理函数,但没有DATEPART()。MySQLMariaDB用户可使用名为YEAR()的函数从日期中提取年份:
    输入:
    SELECT order_num
    FROM Orders
    WHERE YEAR(order_date) = 2012;

    4.3数值处理函数

    数值函数都是差不多的,自行看文档解决即可。

    作者:今孝
    出处:http://www.cnblogs.com/jinxiao-pu/p/6817187.html 
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

    觉得好就点个推荐把!

  • 相关阅读:
    vb dll com 组件发布web servcies
    修改表字段
    实体类集合安某个字段排序
    jquery 页面追加换行等等操作备份
    表锁死 杀死线程
    jeecg 自定义loading框(导入时加载备份)
    UBoot200903移植笔记(第二阶段:时钟!)
    UBoot200903移植笔记(点亮第一展灯)
    UBoot200903移植笔记(从Nandflash启动一)
    UBoot200903移植笔记(从Nandflash启动二)
  • 原文地址:https://www.cnblogs.com/jinxiao-pu/p/6817187.html
Copyright © 2020-2023  润新知