MySQL必知必会 摘录(2)

11.1 函数没有SQL的可移植性强
能运行在多个系统上的代码称为可移植的(portable)。相对来说,多数SQL语句是可移植的,在SQL实现之间有差异时,这些差异通常不那么难处理。而函数的可移植性却不强。几乎每种主要的DBMS的实现都支持其他实现不支持的函数,而且有时差异还很大。 为了代码的可移植,许多SQL程序员不赞成使用特殊实现的功能。虽然这样做很有好处,但不总是利于应用程序的性能。如
果不使用这些函数,编写某些应用程序代码会很艰难。必须利用其他方法来实现DBMS非常有效地完成的工作。
如果你决定使用函数,应该保证做好代码注释,以便以后你(或其他人)能确切地知道所编写SQL代码的含义。
11.2.2 日期和时间处理
基本的日期比较

SELECT cust_id, order_num, order_date
FROM orders
WHERE DATE(order_date) = '2005-09-01';

如果要的是日期,请使用Date()
如果你想要的仅是日期,则使用Date()是一个良好的习惯,即使你知道相应的列只包含日期也是如此。这样,如果由于某种原因表中以后有日期和时间值,你的SQL代码也不用改变。当然,也存在一个Time()函数,在你只想要时间时应该使用它。
不过,还有一种日期比较需要说明。如果你想检索出2005年9月下的所有订单,怎么办?简单的相等测试不行,因为它也要匹配月份中的天数。有几种解决办法,其中之一如下所示:

SELECT cust_id, order_num, order_date
FROM orders
WHERE order_date BETWEEN '2005-09-01' AND '2005-09-30';

还有另外一种办法(一种不需要记住每个月中有多少天或不需要操心闰年2月的办法):

SELECT cust_id, order_num, order_date
FROM orders
WHERE YEAR(order_date) = 2005 AND MONTH(order_date) = 9;

12.1.3 MAX()函数
非数值数据使用MAX()
虽然MAX()一般用来找出最大的数值或日期值,但MySQL允许将它用来返回任意列中的最大值,包括返回文本列中的最大值。在用于文本数据时,如果数据按相应的列排序,则MAX()返回最后一行。

posted @ 2021-05-08 10:21  yx袁祥  阅读(41)  评论(0)    收藏  举报