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

Posted 今孝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

觉得好就点个推荐把!

以上是关于SQL必知必会 -------- 通配符计算字段函数的主要内容,如果未能解决你的问题,请参考以下文章

SQL必知必会

《SQL必知必会》知识点汇总

SQL的学习

MySQL基础之MySQL必知必会用通配符进行过滤

《SQL必知必会》学习笔记

MySQL必知必会第十章 创建计算字段