mysql>
select
SQRT(16)
+----------+
|
SQRT(16)
|
+----------+
|
4.000000
|
+----------+
1
row
in
set
(0.00
sec)
所看到的浮点值,因为内部MySQL将处理浮点数据类型的平方根。
可以使用SQRT函数,计算出记录的平方根。了解SQRT函数更详细用法,考虑EMPLOYEE_TBL的表具有以下记录:
mysql>
SELECT
*
FROM
employee_tbl
+------+------+------------+--------------------+
|
id
|
name
|
work_date
|
daily_typing_pages
|
+------+------+------------+--------------------+
|
1
|
John
|
2007-01-24
|
250
|
|
2
|
Ram
|
2007-05-27
|
220
|
|
3
|
Jack
|
2007-05-06
|
170
|
|
3
|
Jack
|
2007-04-06
|
100
|
|
4
|
Jill
|
2007-04-06
|
220
|
|
5
|
Zara
|
2007-06-06
|
300
|
|
5
|
Zara
|
2007-02-06
|
350
|
+------+------+------------+--------------------+
7
rows
in
set
(0.00
sec)
假设根据上面的表格,要计算所有的dialy_typing_pages的平方根,然后可以通过使用下面的命令:
mysql>
SELECT
name,
SQRT(daily_typing_pages)
->
FROM
employee_tbl
+------+--------------------------+
|
name
|
SQRT(daily_typing_pages)
|
+------+--------------------------+
|
John
|
15.811388
|
|
Ram
|
14.832397
|
|
Jack
|
13.038405
|
|
Jack
|
10.000000
|
|
Jill
|
14.832397
|
|
Zara
|
17.320508
|
|
Zara
|
18.708287
|
+------+--------------------------+
7
rows
in
set
(0.00
sec)
某需求某一条 SQL 语句可能会被反复调用执行,或者每次执行的时候只有个别的值不同(比如 select 的 where 子句值不同,update 的 set 子句值不同,insert 的 values 值不同)。如果每次都需要经过上面的词法语义解析、语句优化、制定执行计划等,则效率就明显不行了。
所谓预编译语句就是将此类 SQL 语句中的值用占位符替代,可以视为将 SQL 语句模板化或者说参数化,一般称这类语句叫Prepared Statements。
预编译语句的优势在于归纳为:一次编译、多次运行,省去了解析优化等过程;此外预编译语句能防止 SQL 注入。
注意:虽然可能是通过预处理 SQL 的方式一定程度的提高了效率,但是对于优化而言,最优的执行计划不是光靠 SQL 语句的模板化来实现的,往往还是需要通过具体值来预估出成本代价。
MySQL 官方将 prepare、execute、deallocate 统称为 PREPARE STATEMENT。
步骤大概分为四步:
1 set —— SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'
2 prepare —— PREPARE stmt2 FROM @s
3 execute —— EXECUTE stmt2
4 deallocate —— DEALLOCATE PREPARE stmt2
mysql有丰富的时间函数:ADDTIME (date2 ,time_interval ) //将time_interval加到date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区
CURRENT_DATE ( ) //当前日期
CURRENT_TIME ( ) //当前时间
CURRENT_TIMESTAMP ( ) //当前时间戳
DATE (datetime ) //返回datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间
DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间
DATEDIFF (date1 ,date2 ) //两个日期差
DAY (date ) //返回日期的天
DAYNAME (date ) //英文星期
DAYOFWEEK (date ) //星期(1-7) ,1为星期天
DAYOFYEAR (date ) //一年中的第几天
EXTRACT (interval_name FROM date ) //从date中提取日期的指定部分
MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串
MAKETIME (hour ,minute ,second ) //生成时间串
MONTHNAME (date ) //英文月份名
NOW ( ) //当前时间
SEC_TO_TIME (seconds ) //秒数转成时间
STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示
TIMEDIFF (datetime1 ,datetime2 ) //两个时间差
TIME_TO_SEC (time ) //时间转秒数]
WEEK (date_time [,start_of_week ]) //第几周
YEAR (datetime ) //年份
DAYOFMONTH(datetime) //月的第几天
HOUR(datetime) //小时
LAST_DAY(date) //date的月的最后日期
MICROSECOND(datetime) //微秒
MONTH(datetime) //月
MINUTE(datetime) //分返回符号,正负或0
SQRT(number2) //开平方。望采纳。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)