oracle与mysql语法不同之处

oracle与mysql语法不同之处,第1张

insert all

into dept(deptno,dname) values(50,'测试一部')

into dept(deptno,dname) values(51,'测试二部')

SELECT 1 FROM DUAL

insert all into dept(deptno,dname)

into dept(deptno,dname) values(60,'测试一部')

into dept(deptno,dname) values(61,'测试二部')

SELECT 62,'测试三' FROM DUAL

begin

insert into dept(deptno,dname) values(70,'测试一部')

insert into dept(deptno,dname) values(71,'测试二部')

end

oracle的序列 sequences(mysql自增长)

sequences的使用分两步

1、新建一个序列(工具建)

2、如何使用

3、函数对比

https://blog.csdn.net/qq_39137554/article/details/76034335

3.1)数学函数

oracle: ceil(-1.001) mysql: ceiling(-1.001)

3.2)字符串函数

1)ascii(str)一样:返回一个字符对应的ascii码值

2)chr||char (不同)

ORACLE:chr(97) MYSQL:char(97)返回这个整数所代表的 ASCII 码值

oracle示例:

3)INSTR||locate(mysql新增 mysql可以用instr locate)

INSTR(s1,s2,[,n1],[n2]) 返回s1中,子串s2从n1开始,第n2次出现的位置。n1,n2默认值为1

oracle例子:

-- 查询s字符串在sdsq中第一次出现的位置,从头开始查找,索引从1开始计算 返回1

select INSTR('sdsq','s') value from dual

-- 查询s字符串在sdsq中第一次出现的位置,从索引从2开始查找 返回3

select INSTR('sdsq','s',2) value from dual

-- 查询s字符串在sdsq中第一次出现的位置,从索引从2开始查找,如果没有查找到,返回0

select INSTR('sdsq','s',2,2) value from dual

mysql:

instr||locate

4)length||char_length(不同)

SELECT length('AAAASDF') VALUE FROM DUAL

CONCAT:连接

LPAD:在左边加点内容(左追加)

RPAD:在右边加点内容(右追加)

把sal变成10位,不足10位的,右侧 补*

select RPAD(sal,10,'*') as v from emp

REPLACE 替换一样

LOWER 转小写一样

UPPER 转大写 一样

initcap首字母大写

SELECT REPLACE('18604001139', '0400', '****') value from dual

select LOWER(ename) username from emp 转小写

select UPPER(ename) username from emp

select initcap(ename) username from emp

3.2.4.1TRIM:去掉首尾的指定字符,不能去除中间的

oracle:trim(子串 from 父串)

select TRIM('S' FROM 'SSMISSTH') value from dual//MISSTH

select TRIM(' ' FROM ' ab c ') value from dual//ab c

3.2.4.2SUBSTR(oracle)||substring(mysql)

SUBSTR(原字符串,开始处位置,截取长度)

select SUBSTR('String',2,5) value from dual //tring

ORACLE:

练习1:

1.写一个查询,用首字母大写,其它字母小写显示雇员的 ename,显

示名字的长度,并给每列一个适当的标签,条件是满足所有雇员名字

的开始字母是J、A 或 M 的雇员,并对查询结果按雇员的ename升序

排序。(提示:使用initcap、length、substr)

练习2 都用函数解决

• 1.查询员工姓名中中包含大写或小写字母A的员工姓名。

select ename

from emp

where instr(ename,'A')>0 OR instr(ename,'a')>0

• 2.查询部门编号为10或20,入职日期在81年5月1日之后,并且姓名中

包含大写字母A的员工姓名,员工姓名长度(提示,要求使用INSTR函

数,不能使用like进行判断)

select ename,length(ename) len

from emp

where deptno in(10,20)

and hiredate>'1-5月-1981'

and instr(ename,'A')>0

• 3.查询每个职工的编号,姓名,工资

– 要求将查询到的数据按照一定的格式合并成一个字符串.

– 前10位:编号,不足部分用 填充,左对齐(右填充)

– 中间10位:姓名,不足部分用 填充,左对齐

– 后10位:工资,不足部分用*填充,右对齐

select rpad(empno,10,' ')||rpad(ename,10,' ')||lpad(sal,10,'*') as value

from emp

select concat(concat(rpad(empno,10,' ') , rpad(ename,10,' ')),lpad(sal,10,'*')) as value

from emp

https://www.cnblogs.com/aipan/p/7941917.html

3.4.1 to_char vs date_format/ time_format

select to_char(hiredate,'YYYY-MM-DD HH24:MI:SS') VALUE FROM emp

select to_char(-125.8, '999D99S') from dual

3.4.2 to_date vs STR_TO_DATE(str,format)

select to_date('2021-04-23 15:12:20','YYYY-MM-DD HH24:MI:SS') VALUE FROM DUAL

3.4.3 to_number vs CAST("123" AS SIGNED INTEGER)

select to_number('12,454.8-', '99G999D9S') value from dual

select to_number('-12,454.8', 'S99G999D9') value from dual

1.显示服务器系统当前时间,格式为2007-10-1217:11:11(提示:使用to_char函数)

select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')

from dual

3.查询员工姓名,工资,格式化的工资(¥999,999.99)(提示:使用to_char函数)

select to_char(sal,'L999G999D99')

from emp

4.把字符串2015-3月-18 13:13:13 转换成日期格式

select to_date('2015-3月-18 13:13:13','YYYY-MON-DD HH24:MI:SS')

from dual

select cast(11 as unsigned int) / 整型 /

select cast(11 as decimal(10,2)) / 浮点型 /

3.5.1 nvl/COALESCE vs ifnull

**NVL函数等价于mysql的ifnull

– 语法:NVL (expr1,expr2)

– 如果expr1不是null,返回expr1,否则返回expr2

select comm,nvl(comm,0) from emp

select comm,coalesce(comm,sal,0) from emp

3.5.2 nvl2 vs if

NVL2函数

– 语法:NVL2(expr1,expr2,expr3)

– 如果expr1不是null,返回expr2,否则返回expr3

select nvl2(comm,'无奖金','有奖金') from emp

3.5.3 NULLIF vs 无(可以考虑用if 建议了解,不用掌握)

NULLIF函数

– 语法: NULLIF(expr1,expr2)

– 比较两个表达式,如果相等,返回null,否则,返回第一个表达式

3.5.4 DECODE(解密的意思)/case vs if/case 多分支情况

DECODE(字段| 表达式, 条件1,结果1[,条件2,结果2…,][,缺省值] )

SELECT ename, deptno,

decode(deptno,

10,' 销售部',

20,' 技术部',

30 , ' 管理部',

' 无') deptname

FROM emp

CASE expr

WHEN comparison_expr1 THEN return_expr1

[WHEN comparison_expr2 THEN return_expr2

WHEN comparison_exprn THEN return_exprn

ELSE else_expr]

END

SELECT ename, deptno,

(CASE deptno

WHEN 10 THEN ' 销售部'

WHEN 20 THEN ' 技术部'

WHEN 30 THEN ' 管理部'

ELSE ' 无' END) deptname FROM emp

EXTRACT ([YEAR] [MONTH][DAY] FROM [日期表达式])

SELECT ename, sal, MONTHS_BETWEEN(SYSDATE,hiredate) months

FROM emp

ORDER BY months

SELECT ename, sal, hiredate, ADD_MONTHS(hiredate,3) new_date

FROM emp

WHERE hiredate>'01-1月-82'

SELECT NEXT_DAY(sysdate,'星期二') NEXT_DAY

FROM DUAL

SELECT Last_DAY('1-2月-2019') last_DAY

FROM DUAL

select EXTRACT (YEAR FROM HIREDATE) AS 年 from emp

select EXTRACT (YEAR FROM HIREDATE) AS 年 from emp

select EXTRACT (MONTH FROM HIREDATE) AS 年 from emp

select EXTRACT (DAY FROM HIREDATE) AS 年 from emp

4、外连接的加号定法。oralce支持,mysql不支持

查询所有雇员姓名,部门编号,部门名称, 包括没有员工

的部门也要显示出来

select e.ename,d.deptno,d.dname

from emp e,dept d

where e.deptno(+)=d.deptno

4、分页的处理

比较日期相等

https://www.cnblogs.com/bailing80/p/11440927.html

看他们网上的,写得都是千篇一律,同时,好多也写得不是很好,下面是我自己总结的有关mysql的使用细节,也是我在学习过程中的一些记录吧,希望对你有点帮助,后面有关存储过程等相关 *** 作还没有总结好,下次总结好了再发给你吧,呵呵~~~~~

MySql学习笔记

MySql概述:MySql是一个种关联数据库管理系统,所谓关联数据库就是将数据保存在不同的表中,而不是将所有数据放在一个大的仓库中。这样就增加了速度与提高了灵活性。并且MySql软件是一个开放源码软件。

注意,MySql所支持的TimeStamp的最大范围的问题,在32位机器上,支持的取值范围是年份最好不要超过2030年,然后如果在64位的机器上,年份可以达到2106年,而对于date、与datetime这两种类型,则没有关系,都可以表示到9999-12-31,所以这一点得注意下;还有,在安装MySql的时候,我们一般都选择Typical(典型安装)就可以了,当然,如果还有其它用途的话,那最好选择Complete(完全安装)在安装过程中,一般的还会让你进行服务器类型的选择,分别有三种服务器类型的选择,(Developer(开发机)、Server Machine(服务器)、Dedicated MySql Server Machine(专用MYSQL服务器)),选择哪种类型的服务器,只会对配置向导对内存等有影响,不然其它方面是没有什么影响的;所以,我们如果是开发者,选择开发机就可以啦;然后接下来,还会有数据库使用情况对话框的选择,我们只要按照默认就可以啦;

连接与断开服务器:

连接:在windows命令提示符下输入类似如下命令集:mysql –h host –u user –p

例如,我在用的时候输入的是:mysql –h localhost –u root –p

然后会提示要你输入用户密码,这个时候,如果你有密码的话,就输入密码敲回车,如果没有密码,直接敲回车,就可以进入到数据库客户端;连接远程主机上的mysql,可以用下面的命令:mysql –h 159.0.45.1 –u root –p 123

断开服务器:在进入客户端后,你可以直接输入quit然后回车就可以了;

下面就数据库相关命令进行相关说明

你可以输入以下命令对数据库表格或者数据库进行相关 *** 作,在这里就省略了,然后直接进行文字说明了;

Select version(),current_date//从服务器得到当前mysql的版本号与当前日期

Select user() //得到当前数据库的所有用户

Use databasename 进入到指定的数据库当中,然后就可以 *** 作这个数据库当中的表格了

Show databases //查询目前数据库中所有的数据库,并且显示出来;

Create batabase databasename创建数据库,例如:create database manager

Show tables //查看当前数据库中的所有表格;

Create table tablename(colums)创建表,并且给表指定相关列,例如:create table pet(name varchar(20),owner varchar(20),species varchar(20),sex char(1),birth date,death date)

Describe tablename将表当中的所有信息详细显示出来,例如:describe pet

可以用命令一次插入多条记录,例如:

Insert into pet values(‘Puffball’,’Diane’,’hamster’,’f’,’1993-12-3’,null),( ‘Puffball’,’Diane’,’hamster’,’f’,’1993-12-3’,now())

Select * from pet 从pet表当中查询出所有的记录,显示出来;

Delete from pet where id=1删除ID为1的那一条记录;

Update pet set birth=’2001-1-3’ where name=’Bowser’更新name为Bowser的记录当中的birth字段的值;

Select distinct owner from pet从pet表中选择出owner字段的值唯一的行,如果有多行记录这个字段的值相同,则只显示最后一次出现这一值的一行记录;

有关日期计算:

Select name,birth,curdate(),(year(curdate())-year(birth)) as age from pet

此处,year()函数用于提取对应字段的年份,当然类似的还有month(),day()等;

在mysql当中,sql语句可以使用like查询,可以用”_”配任何单个字符,用”%”配任意数目字符,并且SQL模式默认是忽略大小写,例如:select * from pet where name like ‘%fy’

当然也可以用正则表达式模式进行配。

同时在sql当中,也要注意分组函数、排序函数、统计函数等相关用法,在这里只列举一二;

Select species,count(*) from pet group by speceis

Select * from pet order by birth desc

查询最大值的相关 *** 作:

Select max(age) from pet

取前多少项记录,这个主要用于分页查询 *** 作当中,

Select * from pet order by birth desc limit 3取前三条记录,

Select * from pet order by birth desc limit 0,3这个可以用于分页查询,limit后面的第一个参数,是起始位置,第二个参数是取记录条数;

有关创建表格自增长字段的写法:

Create table person(id int(4) not null auto_increment,name char(20) not null,primary key (id))

修改表 *** 作:

向表中增加字段:注意,在这个地方,如果是增加多个字段的时候,就要用括号括起来,不然会有问题,如果是单个字段的话,不用括号也没事;

Alter table test add(address varchar(50) not null default ‘xm’,email varchar(20) not null)

将表中某个字段的名字修改或者修改其对应的相关属性的时候,要用change对其进行 *** 作;

Alter table test change email email varchar(20) not null default ‘zz’//不修改字段名

Alter table test change email Email varchar(30) not null//修改字段名称

删除表中字段:

Alter table test drop email//删除单个字段

Alter table test drop address,drop email//删除多列

可以用Drop来取消主键与外键等,例如:

Alter table test drop foreign key fk_symbol

删除索引:

Drop index index_name on table_name

例如:drop index t on test

向表中插入记录:注意,当插入表中的记录并不是所有的字段的时候,应该要在前面列出字段名称才行,不然会报错;

Insert into test(name) values(‘ltx’)

Insert into test values(1,’ltx’)

也可以向表中同时插入多列值,如:

Insert into test(name) values(‘ltx’),(‘hhy’),(‘xf’)

删除表中记录:

Delete from test//删除表中所有记录;

Delete from test where id=1//删除表中特定条件下的记录;

当要从一个表或者多个表当中查询出一些字段然后把这些字段又要插入到另一个表当中的时候,可以用insert …..select语法;

Insert into testt(name) (select name from test where id=4)

从文件中读取行插入数据表中,可以用Load data infile语句;

Load data infile ‘test.txt’ into table test

可以用Describe语法进行获取有关列的信息;

Describe test//可以查看test表的所有信息,包括对应列字段的数据类型等;

MySql事务处理相关语法;

开始一项新的事务:start transaction或者begin transaction

提交事务:commit

事务回滚:rollback

set autocommit true|false 语句可以禁用或启用默认的autocommit模式,只可用于当前连接;

例子:

Start transaction

Update person set name=’LJB’ where id=1

Commit | rollback

数据库管理语句

修改用户密码:以root用户为例,则可以写成下面的;mysql –u root –p 旧密码 –password 新密码

Mysql –u root –password 123;//将root用户的密码修改成123,由于root用户开始的时候,是没有密码的,所以-p旧密码就省略了;

例如修改一个有密码的用户密码:mysql –u ltx –p 123 –password 456;

增加一个用户test1,密码为abc,让他可以在任何时候主机上登陆,并对所有数据库有查询、插入、修改、删除的权限。

Grant select,insert,update,delete on *.* to test1@”%” identified by ‘abc’

增加一个test2用户,密码为abc,让他只可以在localhost上登陆,并且可以对数据库进行查询、插入、修改、删除 *** 作;

Grant select,insert,update,delete on mydb.* to test2@localhost identified by ‘abc’

如果不想让用户test2有密码,可以再输入以下命令消掉密码:

Grant select,insert,update,delete on mydb.* to test2@localhost identified by “”

备份数据库常用命令:mysqldump –h host –u username –p dbname>保存路径与文件名

然后回车后,会让你输入用户密码,输入密码后,再回车就OK啦;

Mysqldump –hlocalhost –uroot –p test >E:\db\test.sql

这一命令具体解释下:

这个命令就是备份test数据库,并且将备份的内容存储为test.sql文件,并且保存在E:\db下面;

命令当中-p 前面的test是数据库名,然后在数据库名后面要跟上一个”>”,然后接下来,就是写要保存的位置与保存文件的文件名;

将备份好的数据库导入到数据库当中去:也就是运行.sql文件将数据库导入数据库当中去->

首先你得创建数据库,然后运行如下命令:mysql –hlocalhost –uroot –p linux<E:\db\test.sql然后回车,再输入密码就可以啦;

解释下上面的命令:linux是就要导入的数据库名字,然后后面要紧跟着“<”符号,然后后面就是要导入的数据库文件;

将数据库导出保存成XML文件、从XML文件导入数据到数据库:

导出表中数据:mysql –X –h hostName –u userName –p Pwd –e “use DatabaseNamesql” >xml文件名

或者用另外一种方式也行:mysqldump –xml –h hostName –u userName –p pwd dbName tableName //这一种只用于显示在当前的mysql客户端,不保存到文件当中;

相关说明:-X代表的是文件的格式是XML,然后-e一写不能掉,还有就是要用双引号将要 *** 作的语句括起来;单引号不行;

例如:mysql –X –hlocalhost –uroot –p –e “use test;select * from pet;”>E:\db\out.xml

从XML文件导入数据到数据库:

Insert into tableName values(1,load_file(‘filepath’))

例如:insert into pet values(1,load_file(“E:\db\out.xml”))

查看数据库状态与查询进程:

Show status//查看状态

Show processlist//查看进程

更改用户名,用以下命令:

Update set user=”新名字” where user=”旧用户名”;

给数据库用户设置管理员权限:

Mysqladmin –h host –u username –p pwd

以root用户为例;

Mysqladmin –h localhost –u root –p 123

存储过程与函数

存储程序和函数分别是用create procedure和create function语句,一个程序要么是一个程序要么是一个函数,使用call语句来调用程序,并且程序只能用输出变量传回值;

要想在MySql5.1中创建子程序,必须具有create routine权限,并且alter routine和execute权限被自动授予它的创建者;

创建存储过程:

首先声明分隔符,所谓分隔符是指你通知mysql客户端你已经输入一个sql语句的字符或字符串符号,在这里我们就以“//”为分隔符;

Delimiter 分隔符\

如:delimiter //

再创建存储过程:

Create procedure 存储过程名 ( )

声明存储过程开始:

begin

然后开始写存储过程体:

Select * from pet

结束存储过程:

End//

刚刚的例子全部写出来,完整的代码就是:

Delimiter //

Create procedure spt () //注意,这个地方,存储过程名与括号之间要有个空格

Begin

Select * from pet

End//到这里,整个存储过程就算写完啦

执行存储过程:

Call 存储过程名 ()//

如,我们执行刚刚创建的存储过程,就是:

Call spt ()//

需要说明的是存储过程名后面一定要加个空格,而后面那个括号,则是用于传送参数的参数列表;另外,我们创建存储过程完成后,也只是创建了,但是只有调用call 存储过程名 ()//后才算执行完毕,才能看到存储过程的结果;

1. MySQL支持enum,和set类型,SQL Server不支持

2. MySQL不支持nchar,nvarchar,ntext类型 

3. MySQL的递增语句是AUTO_INCREMENT,而MS SQL是identity(1,1) 

4. MS SQL默认到处表创建语句的默认值表示是((0)),而在MySQL里面是不允许带两括号的

5. MySQL需要为表指定存储类型  

6.  MS SQL识别符是[],[type]表示他区别于关键字,但是MySQL却是 `,也就是按键1左边的那个符号

7.  MS SQL支持getdate()方法获取当前时间日期,但是MySQL里面可以分日期类型和时间类型,获取当前日期是current_date (),当前完整时间是 now()函数

8. MS SQL不支持replace into 语句,但是在最新的sql20008里面,也支持merge语法

9.  MySQL支持insert into table1 set t1 = „‟, t2 = „‟ ,但是MS SQL不支持这样写 

10. MySQL支持insert into tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1) 

11. MySQL在创建表时要为每个表指定一个存储引擎类型,而MS SQL只支持一种存储引擎

12. MySQL不支持默认值为当前时间的datetime类型(MS SQL很容易做到),在MySQL里面 是用timestamp类型 

13. MS SQL里面检查是否有这个表再删除,需要这样:if exists (select *   from   dbo.sysobjects     where  id = object_id(N'uc_newpm') and OBJECTPROPERTY(id,N'IsUserTable')=1)  但是在MySQL里面只需要 DROP TABLE IF EXISTS cdb_forums

14.  MySQL支持无符号型的整数,那么比不支持无符号型的MS SQL就能多出一倍的最大数 存储 

15. MySQL不支持在MS SQL里面使用非常方便的varchar(max)类型,这个类型在MS SQL里 面既可做一般数据存储,也可以做blob数据存储 

16. MySQL创建非聚集索引只需要在创建表的时候指定为key就行,比如:KEY displayorder  (fid,displayorder) 在MS SQL里面必须要:create unique nonclustered index  index_uc_protectedmembers_username_appid on dbo.uc_protectedmembers  (username asc,appid asc)

17. MySQL text字段类型不允许有默认值 

18. MySQL的一个表的总共字段长度不超过65XXX。 

19. 一个很表面的区别就是MySQL的安装特别简单,而且文件大小才110M(非安装版),相 比微软这个庞然大物,安装进度来说简直就是..... 

20. MySQL的存储过程只是出现在最新的版本中,稳定性和性能可能不如MS SQL。

21. 同样的负载压力,MySQL要消耗更少的CPU和内存,MS SQL的确是很耗资源。

22. mysql的ifnull()函数对应sql的isnull()函数

23. mysql的存储过程中变量的定义去掉@

24. mysql的每句结束要用"" 

25. SQLServer存储过程的AS在MySql中需要用begin .....end替换 

26. 字符串连接用concat()函数如 SQLServer: Temp=‟select * from ‟+‟tablename‟+…+…   MySql:Temp=concat(‟select * from‟, ‟tablecname‟,…,…)  

27. mysql的uuid()对应mssql的GUID() 

28. MySql的out对应SQLServer的output,且mysql 的out要放在变量的前面,SQLServer 的output放在变量后面 

29. MySql out,in,inout的区别——MySQL 存储过程 “in” 参数:跟 C 语言的函数参 数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。MySQL 存储过程 “out” 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值。MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。

30. MySQL的if语句为  if  (条件)  then  end if或者  If  (条件) then Else End if 或者  If(条件)then  Elseif (注意不能写成 Else if )   Elseif  …   End if 

31. Mysql的Execute对应SqlServer的exec   (注意:必须想下面这样调用)  Set @cnt=‟select * from 表名‟  Prepare str from @cnt   Execute str

32. MySql存储过程调用其他存储过程用call  Call 函数名(即SQLServer的存储过程名)(‟参数1‟,‟参数2‟,……)   

33.  mysql的日期 

    1) 获得当前日期函数:curdate(),current_date()

    2) 获得当前时间函数:curtime()

    3) 获得当前日期+时间:now()

    4) MySQL dayof... 函数:dayofweek(), dayofmonth(), dayofyear()分别返回日期参 数,在一周、一月、一年中的位置。 

    5) (注:周日=1,周一=2,周二=3,……)

    6) 返回本月的天数:select day(last_day(now()))

    7) MySQL 为日期增加一个时间间隔:date_add() 

    8) select date_add(CURRENT_DATE(),interval „要增加的天数‟ day) as Fdate

    9) MySQL 为日期减去一个时间间隔:date_sub() 

    10) select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second)

    11) MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)

    12) MySQL 拼凑日期、时间函数:makdedate(year,dayofyear),  maketime(hour,minute,second) 

    13) 例:select makedate(2001,31)-- '2001-01-31'

    14) select makedate(2001,32)-- '2001-02-01'

    15) 本周时间(起始) 

    16) select date_sub(CURRENT_DATE(),interval dayofweek(curdate())-2 day) as Fdate

    17) 本周时间(结束) 

    18) select date_add(CURRENT_DATE(),interval dayofweek(curdate())+3 day) as  Fdate 

    19) 上周时间(起始) 

    20) select date_sub(CURRENT_DATE(),interval dayofweek(curdate())+5 day) as Fdate 

    21) 上周时间(结束) 

    22) select date_sub(CURRENT_DATE(),interval dayofweek(curdate())-1 day) as Fdate

    23) 本月时间(起始) 

    24) select DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY) as Fdate

    25) 本月时间(结束) 

    26) Select date_add(current_date(),interval day(last_day(CURDATE()))  -day(CURDATE()) day) as Fdate

    27) 上月时间(起始)

    28) select DATE_SUB(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())  DAY),interval day(last_day(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) DAY)))-    1 day) as Fdate

    29) 上月时间(结束) 

    30) select DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) DAY) as Fdate

    31) 今年时间(起始) 

    32) select makedate(year(curdate()),1) as FDate

    33) 今年时间(结束) 

    34) select DATE_SUB(makedate(year(curdate())+1,1) ,INTERVAL 1 day) as Fdate

    35) 去年时间(起始) 

    36) select makedate(year(curdate())-1,1) as Fdate

    37) 去年时间(结束) 

    38) select DATE_SUB(makedate(year(curdate()),1) ,INTERVAL 1 day) as FDate

    39) DATE_FORMAT(date,format):根据format字符串格式化date值。下列修饰符 可以被用在format字符串中

    40) %M     月名字(January……December)            %W     星期名字(Sunday……Saturday)            %D     有英语前缀的月份的日期(1st,   2nd,   3rd,   等等。)         %Y     年,   数字,   4   位         %y     年,   数字,   2   位          %a     缩写的星期名字(Sun……Sat)           %d     月份中的天数,   数字(00……31)           %e     月份中的天数,   数字(0……31)           %m     月,   数字(01……12)           %c     月,   数字(1……12)           %b     缩写的月份名字(Jan……Dec)           %j     一年中的天数(001……366)           %H     小时(00……23)           %k     小时(0……23)           %h     小时(01……12)           %I     小时(01……12)           %l     小时(1……12)           %i     分钟,   数字(00……59)            %r     时间,12   小时(hh:mm:ss   [AP]M)             %T     时间,24   小时(hh:mm:ss)           %S     秒(00……59)           %s     秒(00……59)           %p     AM或PM

    41) %w     一个星期中的天数(0=Sunday   ……6=Saturday   )          %U     星期(0……52),   这里星期天是星期的第一天         %u     星期(0……52),   这里星期一是星期的第一天         %%     一个文字“%”。      

    42) 例:所有的其他字符不做解释被复制到结果中。         mysql>  select   DATE_FORMAT('1997-10-04   22:23:00',   '%W   %M   %Y')       ->'Saturday   October   1997'        mysql>select   DATE_FORMAT('1997-10-04   22:23:00',   '%H:%i:%s')   

    43) ->   '22:23:00'    

    44) mysql>select   DATE_FORMAT('1997-10-04   22:23:00',   '%D   %y   %a    %d   %m   %b   %j')    

    45) ->'4th   97   Sat   04   10   Oct   277'    

    46) mysql>select   DATE_FORMAT('1997-10-04   22:23:00',   '%H   %k   %I    %r   %T   %S    %w')    

    47) ->'22   22   10   10:23:00   PM   22:23:00   00   6'

34. MySql存储过程中没有return函数,在MySql中可以用循环和out参数代替  If EXISTS(SELECT * FROM T_Chance WHERE FCustID=CostomerID)  return 0 改写为:  (在参数中定义一个out变量:out temp varchar(100))   BEGIN    Loop1:loop   SELECT count(*) FROM T_Chance WHERE FCustID=CostomerID int @cnt  If @cnt>0 then  begin   set temp=0   leave loop1    endend if  end loop loop1

35. (13) select @a=count(*) from VW_Action 在mySql中修改为:select count(*) from  VW_Action into @a  

36. (14)MySQL中没有top关键字,需要用limit代替且放在后面    注意,在MySQL中的limit不能放在子查询内,limit不同与SQLServer,它可 以规定范围 limit a,b——范围a-b  SQL SERVER : select   top   8   *   from   table1  MYSQL: select   *   from   table1   limit   5

37. (15)即使存储过程没有参数也要写括号“()”

38. (16) 当一个存储过程中有创建临时表时  create procedure up_test () begin   drop table if exists tb1  create TEMPORARY table tb1//注意添加TEMPORARY table ( id int,  name varchar(20) )//注意最后加分号 insert tb1 values('1','jim')select * from tb1end

39. (17)建表中自增长问题:  create table user  (    Id          varchar(10)  primary key  auto_increment  not null,     Name    varchar(20)    not null,     Password    varchar(20),    create_date     datetime   )   auto_increment 自增长

40. (18) "Unable to convert MySQL date/time value to System.DateTime"这是因为在日期 列中有"0000-00-00"数据值,要修正这个问题,你可以把这些数据设为null,或者在连接字符串中设置"Allow Zero Datetime=True" 。  41. (19) MySQL视图的FROM子句不允许存在子查询,因此对于SQL Server中FROM 子句带有子查询的视图,需要手工进行迁移。可通过消除FROM子句中的子查询,或将FROM子句中的子查询重构为一个新的视图来进行迁移。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存