详解MySQL中的SQRT函数的使用方法

详解MySQL中的SQRT函数的使用方法,第1张

MySQL的SQRT函数是用来计算出任何数量的平方根。可以使用SELECT语句找出方检定根的任意数如下:

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) //开平方。望采纳。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7289857.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存