MySQL的数据类型

PHP等程序设计语言一样,MySQL等许多DBMS都有自己的数据类型(即列类型),运算符,语句结构,关键字,以及函数。其中广泛用于SELECTWHERE子句中的函数,对程序员简化查询语句的构造,提高查询计算的效率,起着非常重要的作用。这些函数将一些复杂的查询计算操作用函数封装起来,由MySQL自己执行计算,仅将结果返回给PHP
这些函数,涵盖了数学运算,字符串处理,逻辑运算,日期时间运算,比较运算,语句流程控制,分组汇总,排序等许多方面的处理,下面介绍常用到的一些函数。
为简便起见,用->表示执行查询后MySQL返回的结果。
1)强制运算()
括号。使用它们来强制在一个表达式的计算顺序。
mysql> select1+2*3;
        ->7
mysql> select(1+2)*3;
        ->9
2)算术运算
+ 加法
mysql> select3+5;
        ->8
以此类推:
- 减法
* 乘法
/ 除法
被零除产生一个NULL结果:
mysql> select102/(1-1);
        ->NULL
3)逻辑运算
所有的逻辑函数返回1TRUE)或0FALSE)。NULL被认为是假值。
NOT !)逻辑非
OR ||)逻辑或
AND&&)逻辑与
4)比较运算符
比较操作得出值1TRUE)、0FALSE)或NULL等结果。这些函数工作运用在数字和字符串上。
= 等于
<>不等于
!= 不等于
<= 小于或等于
< 小于
>= 大于或等于
> 大于
mysql> select 2 > 2;
        ->0
IS NULL 是否为空
IS NOT NULL 是否不为空
mysql> select 1 IS NULL, 0 IS NULL, NULL ISNULL:
        ->00 1
expr BETWEEN min AND max
如果expr对大于或等于minexpr是小于或等于maxBETWEEN返回1,否则它返回0
mysql> select 1 BETWEEN 2 AND 3;
        ->0
mysql> select 2 BETWEEN 2 AND '3';
        ->1
expr IN (value,...)
如果expr是在IN表中的任何值,返回1,否则返回0。如果所有的值是常数,那么所有的值根据expr类型被计算和排序,然后项目的搜索是用二进制的搜索完成。这意味着如果IN值表全部由常数组成,IN是很快的。如果expr是一个大小写敏感的字符串表达式,字符串比较以大小写敏感方式执行。
mysql> select 2 IN(0,3,5,'wefwf');
        ->0
mysql> select 'wefwf' IN(0,3,5,'wefwf');
        ->1
expr NOT IN(value,...)
NOT (expr IN(value,...))相同。

ISNULL(expr)
如果exprNULLISNULL()返回1,否则它返回0
mysql> select ISNULL(1+1);
        ->0
mysql> select ISNULL(1/0);
        ->1

注意,使用=NULL的值比较总为假!

5)字符串比较函数
通常,如果在字符串比较中的任何表达式是区分大小写的,比较以大小写敏感的方式执行。
expr LIKE pat tern[ESCAPE'escape-char']
expr与模式字符串pattern进行模式匹配。返回1TRUE)或0FALSE)。用LIKE,你可以在模式中使用下列2 匹配任何数目的字符,甚至零个字符
 精确匹配一个字符
mysql> select 'David!' LIKE'David_';
        ->1
mysql> select 'David!' LIKE '%D%v%';
        ->1

为了测试一个通配符的文字实例,用转义字符的加在字符前面。如果你不指定ESCAPE字符,假定为“”:

 匹配%字符
 匹配_字符

mysql> select 'David!' LIKE'David_';
        ->0
mysql> select 'David_' LIKE'David_';
        ->1

为了指定一个不同的转义字符,使用ESCAPE子句:
mysql> select 'David_' LIKE 'David|_' ESCAPE'|';
        ->1

LIKE允许用在数字的表达式上!(这是MySQLANSI SQLLIKE的一个扩充。)

mysql> select 10 LIKE '1%';
        ->1

expr NOT LIKEpattern [ESCAPE'escape-char']
NOT (expr LIKEpattern[ESCAPE'escape-char'])相同。
6)控制流函数
IF(expr1,expr2,expr3)
如果expr1TRUE(expr1<>0expr1<>NULL),那么IF()返回expr2,否则它返回expr3IF()返回一个数字或字符串值,取决于它被使用的上下文。
mysql> select IF(1>2,2,3);
        ->3
mysql> select IF(1<2,'yes','no');
        ->'yes'
mysql>selectIF(strcmp('test','test1'),'yes','no');
        ->'no'
expr1作为整数值被计算,它意味着如果你正在测试浮点或字符串值,应该使用一个比较操作来做。
mysql> select IF(0.1,1,0);
        ->0
mysql> select IF(0.1<>0,1,0);
        ->1
在上面的第一种情况中,IF(0.1)返回0,因为0.1被变换到整数值, 导致测试IF(0)。这可能不是你期望的。在第二种情况中,比较测试原来的浮点值看它是否是非零,比较的结果被用作一个整数。
CASE value WHEN [compare-value] THEN result[WHEN[compare-value] THEN result ...] [ELSE result]END
CASE WHEN [condition] THEN result [WHEN[condition]THEN result ...] [ELSE result] END
第一个版本返回result,其中value=compare-value。第二个版本中如果第一个条件为真,返回result。如果没有匹配的result值,那么结果在ELSE后的result被返回。如果没有ELSE部分,那么NULL被返回。
mysql> SELECT CASE 1 WHEN 1 THEN "one"WHEN 2 THEN"two" ELSE "more" END;
      ->"one"
mysql> SELECT CASE WHEN 1>0 THEN"true" ELSE"false" END;
      ->"true"
mysql> SELECT CASE BINARY "B" when"a" then 1 when"b" then 2 END;
      ->NULL
7)数学函数
所有的数学函数在一个出错的情况下返回NULL
ABS(X)
返回X的绝对值。
SIGN(X)
返回参数的符号,为-101,取决于X是否是负数、零或正数。
MOD(N,M)
%
(类似C中的%操作符)。返回NM除的余数。
mysql> select MOD(29,9);
        ->2
FLOOR(X)
X向下取整。
mysql> select FLOOR(1.23);
        ->1
mysql> select FLOOR(-1.23);
        ->-2
CEILING(X)
X向上取整。
mysql> select CEILING(1.23);
        ->2
mysql> select CEILING(-1.23);
        ->-1
ROUND(X)
返回参数X的四舍五入的一个整数。
mysql> select ROUND(-1.23);
        ->-1
mysql> select ROUND(-1.58);
        ->-2
mysql> select ROUND(1.58);
        ->2
ROUND(X,D)
返回参数X的四舍五入的有D位小数的一个数字。如果D0,结果将没有小数点或小数部分。
mysql> select ROUND(1.298, 1);
        ->1.3
mysql> select ROUND(1.298, 0);
        ->1
RAND()
RAND(N)
返回在范围01.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。
mysql> select RAND();
        ->0.5925
mysql> select RAND(20);
        ->0.1811
mysql> select RAND(20);
        ->0.1811
mysql> select RAND();
        ->0.2079
mysql> select RAND();
        ->0.7888
你不能在一个ORDER BY子句用RAND()值使用列,因为ORDERBY将重复计算列多次。然而在MySQL3.23中,你可以做: SELECT * FROMtable_name ORDER BYRAND(),这是有利于得到一个来自SELECT * FROMtable1,table2 WHERE a=b ANDc的集合的随机样本。注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估。
LEAST(X,Y,...)
22个以上的参数,返回最小(最小值)的参数。参数使用下列规则进行比较:
如果返回值被使用在一个INT上下文,或所有的参数都是整数值,他们作为整数比较。
如果返回值被使用在一个FLOAT上下文,或所有的参数是实数值,他们作为实数比较。
如果任何参数是一个大小敏感的字符串,参数作为大小写敏感的字符串被比较。
在其他的情况下,参数作为大小写无关的字符串被比较。
mysql> select LEAST(2,0);
        ->0
mysql> selectLEAST(34.0,3.0,5.0,767.0);
        ->3.0
mysql> selectLEAST("B","A","C");
        ->"A"
MySQL 3.22.5以前的版本,你可以使用MIN()而不是LEAST
GREATEST(X,Y,...)
返回最大(最大值)的参数。参数使用与LEAST一样的规则进行比较。
mysql> select GREATEST(2,0);
        ->2
mysql> selectGREATEST(34.0,3.0,5.0,767.0);
        ->767.0
mysql> selectGREATEST("B","A","C");
        ->"C"
MySQL 3.22.5以前的版本, 你能使用MAX()而不是GREATEST.  
8)字符串函数
对于针对字符串位置的操作,第一个位置被标记为1
MySQL根据上下文自动变换数字为字符串,并且反过来也如此:
mysql> SELECT 1+"1";
        ->2
CONCAT(str1,str2,...)
返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。可以有超过2个的参数。一个数字参数被变换为等价的字符串形式。
mysql> select CONCAT('My', 'S','QL');
        ->'MySQL'
mysql> select CONCAT('My', NULL,'QL');
        ->NULL
mysql> select CONCAT(14.3);
        ->'14.3'
mysql> SELECT CONCAT(2,' test');
        ->'2test'

LEFT(str,len)
返回字符串str的最左面len个字符。
mysql> select LEFT('foobarbar', 5);
        ->'fooba'
RIGHT(str,len)
返回字符串str的最右面len个字符。
mysql> select RIGHT('foobarbar', 4);
        ->'rbar'
SUBSTRING(str,pos,len)
MID(str,pos,len)
从字符串str返回一个len个字符的子串,从位置pos开始。
mysql> selectSUBSTRING('123456789123456',5,6);
        ->'567891'
LTRIM(str)
返回删除了其前置空格的字符串str
mysql> selectLTRIM('  barbar');
        ->'barbar'
RTRIM(str)
返回删除了其尾部空格的字符串str
mysql> selectRTRIM('barbar   ');
        ->'barbar'
TRIM(str)
返回去处了首尾空格的字符串str
mysql> selectTRIM('  bar  ');
        ->'bar'
SPACE(N)
返回由N个空格字符组成的一个字符串。
mysql> select SPACE(6);
        ->'      '
REPEAT(str,count)
返回由重复countTimes次的字符串str组成的一个字符串。如果count <=0,返回一个空字符串。如果strcountNULL,返回NULL
mysql> select REPEAT('MySQL', 3);
        ->'MySQLMySQLMySQL'
LCASE(str)
LOWER(str)
返回字符串str,根据当前字符集映射(缺省是ISO-8859-1Latin1)把所有的字符改变成小写。
mysql> select LCASE('ABCDEFG');
        ->'abcdefg'
UCASE(str)
UPPER(str)
返回字符串str,根据当前字符集映射(缺省是ISO-8859-1Latin1)把所有的字符改变成大写。
mysql> select UCASE(' abcdefg ');
        ->'ABCDEFG '

LOAD_FILE(file_name)
读入文件并且作为一个字符串返回文件内容。文件必须在服务器上,你必须指定到文件的完整路径名,而且你必须有file权限。文件必须所有内容都是可读的并且小于max_allowed_packet。如果文件不存在或由于上面原因之一不能被读出,函数返回NULL
mysql> UPDATE table_name
          SETblob_column=LOAD_FILE("/tmp/picture")
          WHEREid=1;
9)日期和时间函数
NOW()
SYSDATE()
CURRENT_TIMESTAMP
'YYYY-MM-DDHH:MM:SS'YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的上下文被使用。
mysql> select NOW();
        ->'1997-12-1523:50:26'
mysql> select NOW() + 0;
        ->19971215235026
CURDATE()
CURRENT_DATE
'YYYY-MM-DD'YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。
mysql> select CURDATE();
        ->'1997-12-15'
mysql> select CURDATE() + 0;
        ->19971215
CURTIME()
CURRENT_TIME
'HH:MM:SS'HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。
mysql> select CURTIME();
        ->'23:50:26'
mysql> select CURTIME() + 0;
        ->235026
        ->10
10)分组计算函数
这些函数,常常是与GROUP BY子句一起使用的函数,作用是对聚合在组内的行,进行计算。
如果在不包含GROUP BY子句的一个语句中使用聚合函数,它等价于聚合所有行。
COUNT(expr)
返回由一个SELECT语句检索出来的行的非NULL值的数目。
mysql> selectstudent.student_name,COUNT(*)
          fromstudent,course
          wherestudent.student_id=course.student_id
          GROUPBY student_name;
COUNT(*)在它返回的检索出来的行数目上有些不同,不管他们是否包含NULL值。如果SELECT从一个表检索,或没有检索出其他列并且没有WHERE子句,COUNT(*)被优化以便快速地返回。例如:
mysql> select COUNT(*) from student;
COUNT(DISTINCT expr,[expr...])
返回一个无重复值的数目。
mysql> selectCOUNT(DISTINCT results) fromstudent;
MySQL中,你可以通过给出一个表达式列表以得到不同的表达式组合的数目。
AVG(expr)
返回expr的平均值。
mysql> select student_name,AVG(test_score)
          fromstudent
          GROUPBY student_name;
MIN(expr)
MAX(expr)
返回expr的最小或最大值。MIN()MAX()可以有一个字符串参数;在这种的情况下,他们返回最小或最大的字符串值。
mysql> select student_name,MIN(test_score),MAX(test_score)
          fromstudent
          GROUPBY student_name;
SUM(expr)
返回expr的和。注意,如果返回的集合没有行,它返回NULL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字乡村和智慧农业的数字化转型是当前农业发展的新趋势,旨在通过应用数字技术,实现农业全流程的再造和全生命周期的管理服务。中国政府高度重视这一领域的发展,提出“数字中国”和“乡村振兴”战略,以提升国家治理能力,推动城乡融合发展。 数字乡村的建设面临乡村治理、基础设施、产业链条和公共服务等方面的问题,需要分阶段实施《数字乡村发展战略纲要》来解决。农业数字化转型的需求包括满足市民对优质农产品的需求、解决产销对接问题、形成优质优价机制、提高农业劳动力素质、打破信息孤岛、提高农业政策服务的精准度和有效性,以及解决农业融资难的问题。 数字乡村建设的关键在于构建“1+3+4+1”工程,即以新技术、新要素、新商业、新农民、新文化、新农村为核心,推进数据融合,强化农业大数据的汇集功能。数字农业大数据解决方案以农业数字底图和数据资源为基础,通过可视化监管,实现区域农业的全面数字化管理。 数字农业大数据架构基于大数据、区块链、GIS和物联网技术,构建农业大数据中心、农业物联网平台和农村综合服务指挥决策平台三大基础平台。农业大数据中心汇聚各类涉农信息资源和业务数据,支持大数据应用。信息采集系统覆盖市、县、乡、村多级,形成高效的农业大数据信息采集体系。 农业物联网平台包括环境监测系统、视频监控系统、预警预报系统和智能控制系统,通过收集和监测数据,实现对农业环境和生产过程的智能化管理。综合服务指挥决策平台利用数据分析和GIS技术,为农业决策提供支持。 数字乡村建设包括三大服务平台:治理服务平台、民生服务平台和产业服务平台。治理服务平台通过大数据和AI技术,实现乡村治理的数字化;民生服务平台利用互联网技术,提供各类民生服务;产业服务平台融合政企关系,支持农业产业发展。 数字乡村的应用场景广泛,包括农业生产过程、农产品流通、农业管理和农村社会服务。农业生产管理系统利用AIoT技术,实现农业生产的标准化和智能化。农产品智慧流通管理系统和溯源管理系统提高流通效率和产品追溯能力。智慧农业管理通过互联网+农业,提升农业管理的科学性和效率。农村社会服务则通过数字化手段,提高农村地区的公共服务水平。 总体而言,数字乡村和智慧农业的建设,不仅能够提升农业生产效率和管理水平,还能够促进农村地区的社会经济发展,实现城乡融合发展,是推动中国农业现代化的重要途径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值