sql语句
1,CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。
这个类型可以是以下值其中的一个:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
所以我们也可以用
CAST
解决问题:
select server_id from cardserver where game_id = 1 order
by CAST(server_id as SIGNED) desc limit 10;
也可以使用CONVERT来搞定此问题:
select server_id from cardserver where game_id = 1 order by CONVERT(server_id,SIGNED) desc limit 10;
修改列的类型
alter table 表名 modify 列名 列类型
修改列名
alter table 表名 change 旧列名 新列名 列类型
ex:
alter table emp change name ename varchar(20);
增加列
alter table 表名 add column 字段名(列名) 列类型(column 可以有和无标准的应该有column )
alter table emp add column moblie int (11);
alter table 表名 add column 字段名(列名) 列类型
after/befor 列名(字段名)删除列
把上面的add改为drop就行了;
修改表名
alter table 表名 rename 新表名;
ex:
alter table emp rename tb_emp;
rename table 表名 to 新表名
rename table tb_emp to emp;
删除表中的某一个字段(注意删除此字段时此字段一低昂要是不关联的字段,否则删除失败,删除成功数据也伴随着删除了)
语法是:
alter table 表名 drop 字段名;
单行函数:concat(str1,str2,....)连接函数
分组统计:Group by 子句是真正作用在于与各种聚合函数配合使用。它是用来查询出来的数据进行分组。 分组的含义是:把该列具有相同值的多条记录当成一条记录处理,最
后只输出一条记录。分组函数忽略空值。 如果需要排序在用order by 子句。
如果where 子句中不能使用分组函数,因此用 having 来代替 where;
ex:
select deptno, avg(sal) as '工资平均值',max(sal) as '最高工资',min(sal) as'最低工资',sum(sal) as'工资总和', count(sal) as '总共的记录' from emp group by
deptno having avg(sal)>3000;
having 语句只能在Group by 后面。分组 加条件 只能用having, where 是在分组前进行条件过滤,where子句中部能使用聚合函数 having是在分组后进行条件过滤。order by一般是都在最后;limit 用来限制显示的行数,他常用来分页。limit的偏移量是从零开始的,所以取出的数据时从偏移量加上1开始取限制的行数.
LEAST运算符
语法格式为:LEAST(值1,值2,...值n),其中值n表示参数列表中有n个值。在有两个或多个参数的情况下,返回最小值。
假如任意一个自变量为NULL,则LEAST()的返回值为NULL
GREATEST运算符
语法格式为: GREATEST(值1,值2,...值n),其中n表示参数列表中有n个值。
在有两个或多个参数的情况下,返回最大值。
假如任意一个自变量为NULL,则GREATEST()的返回值为NULL
注:当参数中是整数或者浮点数时,GREATEST将返回其中最大的值;当参数为字符串时,返回字母中顺序最靠后的字符;当比较值列表中有NULL时,不能判断大小,返回值为NULL
REGEXP 运算符
在SQLSERVER里是没有正则函数或者运算符的,MYSQL在这方面的确比较完善
用来匹配字符串,语法格式为:expr REGEXP 匹配条件,如果expr满足匹配条件,返回1;
如果不满足,则返回0;
若expr或匹配条件任意一个为NULL,则结果为NULL
常用的几种通配符:
(1)'^'匹配以该字符后面的字符开头的字符串
(2)'$'匹配以该字符后面的字符结尾的字符串
(3)'.'匹配任何一个单字符
(4)'[...]'匹配在方括号内的任何字符。例如,“[abc]" 匹配a、b或c。
字符的范围可以使用一个'-',“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字
(5)'*' 匹配零个或多个在他前面的字符。例如,“x*”匹配任何数量的'*'字符,“[0-9]*”匹配任何数量的数字,
而“.*”匹配任何数量的任何字符。
ex:
1、查询以特定字符或字符串开头的记录
字符“^”匹配以特定字符或者字符串开头的文本
SELECT * FROM fruits WHERE f_name REGEXP '^b'
返回f_name字段以b开头的记录
2、查询以特定字符或字符串结尾的记录
字符“$”匹配以特定字符或者字符串结尾的文本
SELECT * FROM fruits WHERE f_name REGEXP 'y$'
返回f_name字段以y结尾的记录
3、用符号“.”来代替字符串中的任意一个字符
字符“.”匹配任意一个字符
SELECT * FROM fruits WHERE f_name REGEXP 'a.g'
4、使用“*”和“+”来匹配多个字符
星号“*”匹配前面的字符任意多次,包括0次。加号“+”匹配前面的字符至少一次
SELECT * FROM fruits WHERE f_name REGEXP '^ba*'
5、匹配指定字符串
正则表达式可以匹配指定字符串,只要这个字符串在查询文本中即可,如要匹配多个字符串,多个字符串之间使用分隔符“|”隔开
SELECT * FROM fruits WHERE f_name REGEXP 'on|ap'
6、匹配指定字符中的任意一个
方括号“[]”指定一个字符集合,只匹配其中任何一个字符,即为所查找的文本
SELECT * FROM fruits WHERE f_name REGEXP '[ot]'
方括号[]还可以指定数值集合
SELECT * FROM fruits WHERE s_id REGEXP '[456]'
7、匹配指定字符以外的字符
“[^字符集合]”匹配不在指定集合中的任何字符
SELECT * FROM fruits WHERE f_id REGEXP '[^a-e1-2]'
8、使用{n,} 或者{n,m}来指定字符串连续出现的次数
“字符串{n,}”,表示至少匹配n次前面的字符;“字符串{n,m}”表示匹配前面的字符串不少于n次,不多于m次。
SELECT * FROM fruits WHERE f_name REGEXP 'b{1,}'
特别提示
某一些MYSQL中的特殊字符需要用转义字符才能插入数据库,否则产生意料之外的结果。
下面的特殊字符需要在输入时加反斜线符号开头
输入单引号需要:\'
输入双引号需要:\''
输入反斜杠:\\
输入回车符:\r
输入换行符:\n
输入制表符:\tab
输入退格符:\b
在插入这些特殊字符到数据库之前一定要进行转义处理