- select to_char(sysdate,'hh24MISS') from dual --Oracle中查询系统时间的小时、分、秒的语句
- declare @a char
- select a=left(replace(convert(varchar,getdate(),108),':',''),4) from hd_timeslot
- --SQL中查询系统时间的小时和分钟的语句
- select * from xh_user where convert(varchar,regtime,120) > '20070328' order by regtime
- --SQL中查询日期时间字段的值在什么范围之间
- select * from hd_ontime where rownum < 2; --表示从hd_ontime表中查询第一条所有的记录,相当于 --SQL中的TOP
- --Oracle从表中取随机的任意一行
- select content from (select * from Con_Aqml order by trunc(dbms_random.value(0,100)))where rownum=1 --从Con_Aqml表里查询随机任意一行,(0,100)表示行数的最大范围为100
- select *from (select *from Con_Lxxh order by dbms_random.value) where rownum=1
- ----从Con_Lxxh表里查询随机任意一行,order by dbms_random.value必须要是关键字
- create sequence sequence_add_one1
- minvalue 1
- maxvalue 100
- start with 1
- increment by 1
- cache 20 --创建一个自动加一的sequence,值的范围为从一开始到100结束
- insert into Con_LXXH(Autoid) values(sequence_add_one1.nextval) --将sequence生成的值插入到字段Autoid里面去
- 建立一个可以自动加一的字段,相当于SQL中的IDENTIFY
- create sequence order_ids start with 1 increment by 1 nomaxvalue; --order_ids为sequence名称
- 使用:
- insert into items(id) values(order_ids.nextval); --items为表名,id为字段名
- select to_char(sysdate,'D') from dual --取出系统时间是当月中的星期几(星期日是1)
- 日期格式参数 含义说明
- D 一周中的星期几
- DAY 天的名字,使用空格填充到9个字符
- DD 月中的第几天
- DDD 年中的第几天
- DY 天的简写名
- IW ISO标准的年中的第几周
- IYYY ISO标准的四位年份
- YYYY 四位年份
- YYY,YY,Y 年份的最后三位,两位,一位
- HH 小时,按12小时计
- HH24 小时,按24小时计
- MI 分
- SS 秒
- MM 月
- Mon 月份的简写
- Month 月份的全名
- W 该月的第几个星期
- WW 年中的第几个星期
- instr(str1,str2,[start_pos[,occurrence]])
- str1 被检索的字符串
- str2 再str1内要找的子字符串
- start_pos 查找的起始位置
- occurrence出现次数
- returns 返回字符串位置或0
- substr:取数据(从什么开始到什么结束)
- instr:取整数
- upper:将小写字母转换成大写字母
- delete a where id in(select id from b) --SQL删除表a中所有的数据当表a中的id等于表b中的id
- --使用透明网关从Oracle查SQL数据库中的表,查询随机一条
- select * from (select * from table_name@ivrnet_sql order by dbms_random.value) where rownum<2
- --SQL数据库中随机取一条数据的语法
- select top 1 * from table_name order by newid()
- --判断表testtable1 中的数据不在表testtable2中
- select a1 from testtable1 where a1 not in
- (select distinct a2 from testtable2)
- Oracle数据导出:
- 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:/daochu.dmp中
- exp system/manager@TEST file=d:/daochu.dmp full=y
- 2 将数据库中system用户与sys用户的表导出
- exp system/manager@TEST file=d:/daochu.dmp owner=(system,sys)
- 3 将数据库中的表table1 、table2导出
- exp system/manager@TEST file=d:/daochu.dmp tables=(table1,table2)
- 4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
- exp system/manager@TEST file=d:/daochu.dmp tables=(table1) query=/" where filed1 like '00%'/"
- 上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。
- 不过在上面命令后面 加上 compress=y 就可以了
- Oracle数据的导入
- 1 将D:/daochu.dmp 中的数据导入 TEST数据库中。
- imp system/manager@TEST file=d:/daochu.dmp
- 上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
- 在后面加上 ignore=y 就可以了。
- 2 将d:/daochu.dmp中的表table1 导入
- imp system/manager@TEST file=d:/daochu.dmp tables=(table1)
- Oracle中取表中任意一个字段的数据语句
- select * from xhth where rownum = 1 and scrphone not in
- (select * from xhth where rownum<2)
- SQL在现有的表中增加一个字段
- alter table 表名 add 列名 varchar(20) null
- SQL 删除现有表中的一个字段
- alter table 表名 drop column 列名
- SQL修改表中字段的名称
- sp_rename '表名.老的字段名称','新的字段名称','column'
- SQL查寻表中字段相同的记录
- select * from 表名 group by 列名 having count(*) > 1
- SQL查询两表中相同的记录
- Select 表1.* From 表1,表2 Where 表1.列1 = 表2.列1
- 或 Select 表1.* From 表1 Inner Join 表2 On 表1.列1 = 表2.列1
- SQL中删除相同的记录
- select distinct * into #temp from Utable
- drop table Utable
- insert into Utable select * from #temp
- SQL两个表(T1,T2)中有相同的记录,删除T1表中T2表有的列
- delete T1 where exists(select * from T2 where C1=T1.C1 and C2=T2.C2)
- 或:
- delete T1 from T2 where T1.c1=T2.c1 and T1.C2=T2.C2
- Oracle查询表中字段相同的记录
- select phone from wz_user group by phone having count(*) > 1 --tableb为创建的新表,phone为需要查的字段,如果要多查几个字段的话 --group by后面也要接查的字段名
- (不懂可以上此网站查http://wangnewton.blogdriver.com/wangnewton/1075153.html)
- 查询A(ID,Name)表中第31至40条记录,ID作为主键可能不是连续增长的列
- select top 10 * from A where id not in (select top 30 id from A)
- 或者
- select top 10 * from A where id > (select max(id) from (select top 30 id from A)as b)
- 查询表中ID重复三次以上的记录
- Select * from table where id in (Select id from table group by id having count(id)> =3)
- SQL访问SQL
- exec sp_addlinkedserver '61.187.98.146'
- sp_addlinkedsrvlogin '61.187.98.146',false, NULL,'sa','t9i8m7e6'
- select * from [61.187.98.146].ivr.dbo.xh_phone
- 在已有的Oracle表中添加字段
- alter table 表名 add(字段名 字段类型)
- 将SQL自动生成的ID重0开始
- truncate table 表名
- SQL去掉字段一些内容的sql语句
- select replace(字段名称,'abc/','') as 字段名称 from table --abc/为需要去掉的内容,去掉的内容被替换成空内容
- 或者
- select 字段名称= stuff(字段名称,1,4) from table
- sql server数据库定时自动备份
- 1、进入企业管理器中->管理->sql server代理->作业;
- 2、新建作业,作业名称随便取,例如:data备份,所有者选择sa,当然你也可以选择其他用户,前提是该用户有执行作业的权限;
- 3、点击步骤标签,进入步骤面板。新建步骤,步骤名可以随便填写,如步骤1,类型和数据库默认,不需要修改。命令中写入以下语句:
- BACKUP DATABASE [数据库名] TO DISK = N'F:/data/数据库备份' WITH NOINIT , NOUNLOAD , NAME = N'数据库 备份', NOSKIP , STATS = 10, NOFORMAT
- 注意:需要修改的地方,数据库名,DISK=(这里需要填写路径和你的数据库备份的名称)后面的Name=可以随便填写。
- 4、点击调度标签,进入调度面板,新建调度,名称随便填写,选择反复出现,点更改可以选择你想要执行任务的随意调度。如每天,每2天,每星期,每月等。根据需要自己设置;
- 5、确定后,不要忘记一件事情,在你刚才建立的工作上点右键,启动工作,如果你的工作没有问题,将会提示执行成功,并有相对应的备份文件在你的磁盘上出现;
- 6、还有一个重要的问题就是你的sql server agent服务器已经启动。
- 如果我们需要根据每天的日期来生成一个新的备份,以便我们区别备份文件。这时,我们需要修改一下刚才的sql语句。参考实例: declare @filename nvarchar(100) set @filename='F:/AddIn/备份/data'+convert(char(10),getdate(),112) print @filename BACKUP DATABASE [addin] TO DISK = @filename WITH NOINIT , NOUNLOAD , NAME = N'addin 备份', NOSKIP , STATS = 10, NOFORMAT
- 清除SQL日志:
- DECLARE @LogicalFileName sysname,
- @MaxMinutes INT,
- @NewSize INT
- USE szwzcheck -- 要操作的数据库名
- SELECT @LogicalFileName = 'szwzcheck_Log', -- 日志文件名
- @MaxMinutes = 10, -- Limit on time allowed to wrap log.
- @NewSize = 20 -- 你想设定的日志文件的大小(M)
- -- Setup / initialize
- DECLARE @OriginalSize int
- SELECT @OriginalSize = size
- FROM sysfiles
- WHERE name = @LogicalFileName
- SELECT 'Original Size of ' + db_name() + ' LOG is ' +
- CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
- CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
- FROM sysfiles
- WHERE name = @LogicalFileName
- CREATE TABLE DummyTrans
- (DummyColumn char (8000) not null)
- DECLARE @Counter INT,
- @StartTime DATETIME,
- @TruncLog VARCHAR(255)
- SELECT @StartTime = GETDATE(),
- @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
- DBCC SHRINKFILE (@LogicalFileName, @NewSize)
- EXEC (@TruncLog)
- -- Wrap the log if necessary.
- WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time
- AND @OriginalSize = (SELECT size FROM sysfiles WHERE name =
- @LogicalFileName)
- AND (@OriginalSize * 8 /1024) > @NewSize
- BEGIN -- Outer loop.
- SELECT @Counter = 0
- WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
- BEGIN -- update
- INSERT DummyTrans VALUES ('Fill Log')
- DELETE DummyTrans
- SELECT @Counter = @Counter + 1
- END
- EXEC (@TruncLog)
- END
- SELECT 'Final Size of ' + db_name() + ' LOG is ' +
- CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
- CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
- FROM sysfiles
- WHERE name = @LogicalFileName
- DROP TABLE DummyTrans
- SET NOCOUNT OFF
- 把szwzcheck换成你数据库的名字即可,在查询分析器里面运行。
- 有全角的空格(为了显示好看),你自己把他换一下.
- 收缩日志:
- 企业管理器--所有任务--收缩数据库--文件--选日志文件收缩
- SQLServer2000同步复制技术实现步骤
- 一、 预备工作
- 1.发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户
- --管理工具
- --计算机管理
- --用户和组
- --右键用户
- --新建用户
- --建立一个隶属于administrator组的登陆windows的用户(DBUser)
- 2. 发布服务器,订阅服务器都创建一个同名的SQL登陆用户或使用sa用户,并设置相同的密码,密码不同不行
- 企业管理器
- --右键SQL实例
- --安全性
- --登陆
- --新建登陆
- --常规--名称(remote)--sqlserver身份验证 密码(timesonserver) --更改默认的数据库
- --服务器角色 --System Administrators
- --数据库访问(每个数据库都要单独的许可,只是需要的数据库才需要设置,数据库角色中允许选择publice和db_owner)
- 3.在发布服务器上,新建一个共享目录,做为发布的快照文件的存放目录,操作:
- 我的电脑--D:/ 新建一个目录,名为: PUB
- --右键这个新建的目录
- --属性--共享
- --选择"共享该文件夹"
- --通过"权限"按纽来设置具体的用户权限,保证第一步中创建的用户(DBUser) 具有对该文件夹的所有权限
- --确定
- 4.设置SQL代理(SQLSERVERAGENT)服务的启动用户(发布/订阅服务器均做此设置)
- 开始--程序--管理工具--服务
- --右键SQLSERVERAGENT
- --属性--登陆--选择"此账户"
- --输入或者选择第一步中创建的windows登录用户名(DBUser)
- --"密码"中输入该用户的密码
- 5.设置SQL Server身份验证模式,解决连接时的权限问题(发布/订阅服务器均做此设置)
- 企业管理器
- --右键SQL实例--属性
- --安全性--身份验证
- --选择"SQL Server 和 Windows"
- --确定
- 6.(在连接端配置,比如,在订阅服务器上配置的话,服务器名称中输入的是发布服务器的IP 发布/订阅服务器均做此设置)
- 开始--程序--Microsoft SQL Server--客户端网络实用工具
- --别名--添加
- --网络库选择"tcp/ip"--服务器别名输入SQL服务器名
- --连接参数--服务器名称中输入SQL服务器ip地址
- --如果你修改了SQL的端口,取消选择"动态决定端口",并输入对应的端口号
- 7.在发布服务器和订阅服务器上互相注册
- 企业管理器
- --右键SQL Server组
- --新建SQL Server注册...
- --下一步--可用的服务器中,输入你要注册的远程服务器名(此写远程服务器的机器名不写IP地址) --添加
- --下一步--连接使用,选择第二个"SQL Server身份验证"
- --下一步--输入用户名和密码(用户名:remote 密码:timesonserver)
- --下一步--选择SQL Server组,也可以创建一个新组
- --下一步--完成
- 二、 正式配置
- 1、配置发布服务器
- 打开企业管理器,在发布服务器上执行以下步骤:
- (1) 从[发布服务器 ]下拉菜单的[复制]子菜单[发布内容]中选择[配置发布、订阅服务器和分发]出现配置发布和分发向导
- (2) [下一步] 选择分发服务器 可以选择把发布服务器自己作为分发服务器或者其他sql的服务器(选择自己)
- (3) [下一步] 设置快照文件夹
- 采用默认//servername/Pub (推荐使用默认的设置,如://ALEX/C$/Program Files/Microsoft SQL Server/MSSQL/ReplData)
- (4) [下一步] 自定义配置
- 可以选择:是,让我设置分发数据库属性启用发布服务器或设置发布设置 (推荐)
- 否,使用下列默认设置
- (5) [下一步] 设置分发数据库名称和位置 采用默认值
- (6) [下一步] 启用发布服务器 选择作为发布的服务器(点击分发数据库的右边的筐--常规--使用 sqlserver身份验证,输入用户名:remote密码:timesonserver)
- (7) [下一步] 选择需要发布的数据库和发布类型 (只要选择合并,事务不要选)
- (8) [下一步] 选择注册订阅服务器
- (9) [下一步] 完成配置
- (10)从[发布服务器 ]下拉菜单的[复制]子菜单[发布内容]中选择[新建发布]
- (11)[选择发布数据库]如IVR
- (12)[选择发布类型]中选择合并发布
- (13)[指定项目]中选择需要合并的表和存储过程
- (14)[自定义发布的属性]中选择:是,我将定义数据筛选
- (15)[允许匿名订阅]中选择:是,允许匿名订阅
- (16)[设置快照代理程序调度]中设置调度的时间和发生的频率
- (17)完成配置
- *注:如果发布服务器和订阅服务器相互不能访问共享文件夹就只能将第三步中生成的快照文件夹,如:repldata 拷贝到订阅服务器上在配置订阅服务器
- 中的第七步时选择快照文件选择刚拷贝来的文件
- 2、配置订阅服务器
- (1)从[订阅服务器]菜单的[复制]子菜单中选择[订阅]--新建请求订阅
- (2)选择发布中选择已发布的服务器,如ALEX--IVRSYNC:IVR
- (3)[指定同步代理程序登陆]选择SQL身份验证(此用户名和密码是发布和订阅服务器上新建的用户名和密码)
- (4)[选择目的数据库]如IVR
- (5)[允许匿名订阅]中选择:是,生成匿名订阅
- (6)[初始化订阅]中选择:是,初始化架构和数据并将复选框中的启动合并代理程序来立即初始化订阅
- (7)[快照传送]中选择使用下列文件夹中的快照文件(发布服务器上的共享文件,如//Alex/repldata)
- (8)[设置合并代理程序调度]中选择连续地
- (9)完成配置(注:如果订阅服务器生成不成功就查看错误提示是什么或者看系统工具中事件查看器中的应用程序日志)
- 表a、b。字段都为name、count。其中通过name一一对应,现在需要更新表b,使其所有的count值都增加对应a表中的相应值:
- update b set b.count = b.count + a.count from a join b on a.name = b.name
- SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm
- 例如:
- select getdate()
- 2004-09-12 11:06:08.177
- 整理了一下SQL Server里面可能经常会用到的日期格式转换方法:
- 举例如下:
- select CONVERT(varchar, getdate(), 120 )
- 2004-09-12 11:06:08
- select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')
- 20040912110608
- select CONVERT(varchar(12) , getdate(), 111 )
- 2004/09/12
- select CONVERT(varchar(12) , getdate(), 112 )
- 20040912
- select CONVERT(varchar(12) , getdate(), 102 )
- 2004.09.12
- select CONVERT(varchar(12) , getdate(), 101 )
- 09/12/2004
- select CONVERT(varchar(12) , getdate(), 103 )
- 12/09/2004
- select CONVERT(varchar(12) , getdate(), 104 )
- 12.09.2004
- select CONVERT(varchar(12) , getdate(), 105 )
- 12-09-2004
- select CONVERT(varchar(12) , getdate(), 106 )
- 12 09 2004
- select CONVERT(varchar(12) , getdate(), 107 )
- 09 12, 2004
- select CONVERT(varchar(12) , getdate(), 108 )
- 11:06:08
- select CONVERT(varchar(12) , getdate(), 109 )
- 09 12 2004 1
- select CONVERT(varchar(12) , getdate(), 110 )
- 09-12-2004
- select CONVERT(varchar(12) , getdate(), 113 )
- 12 09 2004 1
- select CONVERT(varchar(12) , getdate(), 114 )
- 11:06:08.177
- Orcale创建表xh_comuser,表结构为通过透明网关从SQL数据库中查出来得表xh_comuser
- create table xh_comuser as (select * from xh_comuser@czxh_sql)
- 通过SQL访问Oracle数据库增、删、改、查的连接方法
- 如:select * from openquery(ora,'select * from smsrun.tailor_user_info'),此语句中tailor_user_info为Oracle数据库中的表,ora为链接服务器的名称。
- update openquery(ora,'select * from aaa where column1=???') set column2=???
- delete openquery(ora,'select * from aaa where column1=???')
- insert into openquery(ora,'select * from aaa where column1=???')
- values(...,...,...,...)
- Oracle 创建临时表的语句:
- create global temporary table tableName as select * from table1
- 或
- create global temporary table tableName
- (
- 字段名 varchar(20)
- )
- 将表test2中的字段fprefix的值的前三位由130改成156
- update test2 set fprefix = '156'||substr(fprefix,4,7)
- 比如现在有一人员表 (表名:peosons)
- 若想将姓名、身份证号、住址这三个字段完全相同的记录查询出来
- select p1.* from persons p1,persons p2 where p1.id<>p2.id and p1.cardid = p2.cardid and p1.pname = p2.pname and p1.address = p2.address
- 可以实现上述效果.
- 几个删除重复记录的SQL语句
- 1.用rowid方法
- 2.用group by方法
- 3.用distinct方法 网页教学网
- 1。用rowid方法
- 据据oracle带的rowid属性,进行判断,是否存在重复,语句如下:
- 查数据:
- select * from table1 a where rowid !=(select max(rowid)
- from table1 b where a.name1=b.name1 and a.name2=b.name2......)
- 删数据:
- delete from table1 a where rowid !=(select max(rowid)
- from table1 b where a.name1=b.name1 and a.name2=b.name2......)
- 2.group by方法
- 查数据:
- select count(num), max(name) from student --列出重复的记录数,并列出他的name属性
- group by num
- having count(num) >1 --按num分组后找出表中num列重复,即出现次数大于一次
- 删数据:
- delete from student
- group by num
- having count(num) >1
- 这样的话就把所有重复的都删除了。
- 网页教学网
- 3.用distinct方法 -对于小的表比较有用
- 网页教学网
- create table table_new as select distinct * from table1 minux
- truncate table table1;
- insert into table1 select * from table_new;
- Webjx.Com
- 查询及删除重复记录的方法大全
- 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
- select * from people
- where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
- 2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
- delete from people
- where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
- and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
- 3、查找表中多余的重复记录(多个字段)
- select * from vitae a
- where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
- 4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
- delete from vitae a
- where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
- and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
- 5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
- select * from vitae a
- where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
- and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
- (二)
- 比方说
- 在A表中存在一个字段“name”,
- 而且不同记录之间的“name”值有可能会相同,
- 现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;
- Select Name,Count(*) From A Group By Name Having Count(*) > 1
- 如果还查性别也相同大则如下:
- Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
- 网页教学网
- (三)
- 方法一
- declare @max integer,@id integer
- declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1
- open cur_rows
- fetch cur_rows into @id,@max
- while @@fetch_status=0
- begin
- select @max = @max -1
- set rowcount @max
- delete from 表名 where 主字段 = @id
- fetch cur_rows into @id,@max
- end
- close cur_rows
- set rowcount 0
- 方法二
- "重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。 网页教学网
- 1、对于第一种重复,比较容易解决,使用
- select distinct * from tableName
- 就可以得到无重复记录的结果集。
- 如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
- select distinct * into #Tmp from tableName
- drop table tableName
- select * into tableName from #Tmp
- drop table #Tmp
- 发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
- 2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
- 假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
- select identity(int,1,1) as autoID, * into #Tmp from tableName
- select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
- select * from #Tmp where autoID in(select autoID from #tmp2)
- 最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
- (四)
- 查询重复
- select * from tablename where id in (
- select id from tablename
- group by id
- having count(id) > 1
- )
- 本文来自:网页教学网(www.webjx.com)原文链接:http://www.webjx.com/database/sqlserver/database_sqlserver_2007_11_28_1421.htm
- 如果视图调用了表的话更改表结构之后需将视图也相对应的更新,语句如下:
- exec sp_recompile 'studentuser'
- exec sp_refreshview 'v_studentuser'
- CREATE proc editStuAttendance
- @schoolId int, --学校编号
- @classId varchar(4000) --班级编号,假如传过来的参数值为1,2,3
- as
- declare @i int
- declare @startDate datetime
- --set @startDate=dateadd(dd,9-datepart(dw,getdate()),getdate())
- set @startDate=dateadd(dd,case datepart(dw,getdate()) when 1 then 1 else 9-(datepart(dw,getdate())) end,getdate()) --取单前时间的下个礼拜一的语句
- set @i=0
- select @n = 1
- while @i<7
- begin
- set @n=1
- while charindex(',',@classId,@n) > 0
- begin
- set @classIdTemp = cast(substring(@classId,@n,charindex(',',@classId,@n)-@n) as int) --去掉参数传过来无逗号的值并将之转换为整型,此时取的值为1,已下再对之循环
- select @attendDate=convert(char(8),dateadd(dd,@i,@startDate),112)
- select @amInStd=amInStd from classLessonState where schoolId=@schoolId and classId=@classIdTemp
- select @amOutStd=amOutStd from classLessonState where schoolId=@schoolId and classId=@classIdTemp
- select @pmInStd=pmInStd from classLessonState where schoolId=@schoolId and classId=@classIdTemp
- select @pmOutStd=pmOutStd from classLessonState where schoolId=@schoolId and classId=@classIdTemp
- select @amState=amState from classLessonState where schoolId=@schoolId and classId=@classIdTemp
- select @pmState=pmState from classLessonState where schoolId=@schoolId and classId=@classIdTemp
- insert into stuAttendance(schoolId,classId,attendDate,userId,cardId,amIn,amInStd,amOut,amOutStd,amStatus,pmIn,pmInStd,pmOut,pmOutStd,pmStatus)
- select @schoolId,@classIdTemp,@attendDate,userId,cardId,null,@amInStd,null,@amOutStd,@amState,null,@pmInStd,null,@pmOutStd,@pmState
- from studentuser where schoolId=@schoolId and classId=@classIdTemp and studentstatus=1
- select @n = charindex(',',@classId,@n)+1
- end
- set @i=@i+1
- end
- Oracle在当前系统时间上加一个小时:1是代表一天,1/24就是一小时,同理1/24/60就是一分钟
- 如 select sysdate+1 from dual 表示:在当前时间上加一天
- select sysdate+1/24 from dual 表示:在当前时间上加一小时
- select sysdate+1/24/60 from dual 表示:在当前时间上加一分钟
- select sysdate+1/24/60/2 from dual 表示:在当前时间上加半分钟
- 在SQL Server中,如何实现类似Oracle的Rownum这样的伪列功能
- 在Oracle中,可以这样写
- select rownum 序号, CustName 姓名
- from CustInfo
- 可以得到如下结果:
- 序号 姓名
- ---------------
- 1 张三
- 2 李四
- 3 王五
- .. ....
- ---------------
- 其中的RowNum就是伪列,并不真正存在于db中。
- SQL中可以这么写
- select ID=identity(int,1,1),* into #temp from tablename
- select * from #temp
- exec sp_pkeys table1----得到表的主键
- exec sp_fkeys table1----得到表的外键
SQL和Oracle语法
最新推荐文章于 2022-01-27 14:44:56 发布