SQL函数

NULL

//SQL Server 、 MS Access
SELECT
    ProductName,
    UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products
//MySQL
SELECT
    ProductName,
    UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products
或者我们可以使用 COALESCE() 函数,如下所示:
SELECT
    ProductName,
    UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products

COUNT(DISTINCT column_name)

函数返回指定列的不同值的数目

注意:COUNT(DISTINCT) 适用于 ORACLE 和 Microsoft SQL Server,但是无法用于 Microsoft Access。

FIRST()

函数返回指定的列中第一个记录的值(同理last())

注释:只有 MS Access 支持 FIRST()、LAST()函数。

其他数据库相同作用的实现方式:

//SQL Server
SELECT TOP 1
column_name
FROM table_name
ORDER BY column_name ASC;

//MySQL
SELECT
column_name
FROM table_name
ORDER BY column_name ASC
LIMIT 1;

//Oracle
SELECT
column_name
FROM table_name
ORDER BY column_name ASC
WHERE ROWNUM <=1;

Having子句

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。

HAVING 子句可以让我们筛选分组后的各组数据。

SELECT
Websites.name,
Websites.url,
SUM(access_log.count) AS nums
FROM (access_log
INNER JOIN Websites
ON access_log.site_id = Websites.id)
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;

UCASE()LCASE()

LCASE() 函数把字段的值转换为小写

注意:sqlserver 语法不同,SELECT LOWER(column_name) FROM table_name;

MID()

从文本字段中提取字符,name是字段名,1是开始位置(1起始),4是返回字符数(如果省略,则 MID() 函数返回剩余文本)

SELECT MID(name,1,4) AS ShortTitle FROM Websites;

LEN()

返回文本字段中值的长度。

注意:mysql语法不同,使用length()

ROUND()

用于把数值字段舍入为指定的小数位数。
SELECT ROUND(1.298, 1);        -> 1.3

SELECT ROUND(-1.23);            -> -1

NOW()

返回当前系统的日期和时间。

IFNULL()

SELECT IFNULL(name, NULL) name FROM …
SELECT IFNULL(count,0)count from …

FORMAT()

用于对字段的显示进行格式化

SELECT  name,url,DATE_FORMAT(Now(), '%Y-%m-%d') AS date FROM Websites;
posted @ 2019-04-15 16:55  WhatAreWords  阅读(140)  评论(0编辑  收藏  举报