还有顺便问下,如何格式化一个时间,类似于DATE_FORMAT(update_date,'%H:%i:%s'),这是Mysql的,请问sybase的怎么做?
按行读取
CREATE PROCEDURE GetDataByLine
(
--创建一个分页读取过程
@SqlStr varchar(8000), --SQL语句
@FirstRec int, --页起始行
@LastRec int --页结束行
)
AS
DECLARE @dt varchar(10) --生成临时表的随机数
BEGIN
SELECT @dt= substring(convert(varchar, rand()), 3, 10) --一个字符型的随机数
--将搜索结果放入临时表中,表名随机生成,在' FROM '前插入'INTO '+随机临时表名
SELECT @SqlStr = stuff(@SqlStr, charindex(' FROM ', upper(@SqlStr)), 6 ,' INTO tempdb..Lining' + @dt + ' FROM ')
EXECUTE (@SqlStr)
--为临时表增加id号
SELECT @SqlStr = 'ALTER TABLE tempdb..Lining' + @dt + ' ADD TEMPDB_ID numeric(10) IDENTITY PRIMARY KEY'
EXECUTE (@SqlStr)
--计算临时表中的记录数
--SELECT @SqlStr = 'SELECT Count(*) From tempdb..Lining' + @dt
--EXECUTE (@SqlStr)
--选取记录号在起始行和结束行中间的记录
SELECT @SqlStr = 'SELECT * FROM tempdb..Lining' + @dt + ' WHERE TEMPDB_ID > ' + convert(varchar, @FirstRec) + ' and TEMPDB_ID <= ' + convert(varchar, @LastRec)
EXECUTE (@SqlStr)
--删除临时表
SELECT @SqlStr = 'DROP TABLE tempdb..Lining'+@dt
EXECUTE (@SqlStr)
END
/*
some comments:
1.@SqlStr varchar(8000), depends on your page size
2. this is a generic paging sp, if you just want to use it for specific table,
you'd better change the 'tempdb..Lining' to #Paging, the performance will be better
*/
按页读取
CREATE PROCEDURE GetDataByPage
(
--创建一个分页读取过程
@SqlStr varchar(8000), --SQL语句
@PageSize int, --每页记录数
@CurrentPage int --当前页数
)
AS
DECLARE @FirstRec int, @LastRec int, @dt varchar(10) --页起始行,页结束行,生成临时表的随机数
BEGIN
SELECT @FirstRec = (@CurrentPage - 1) * @PageSize --计算页起始行
SELECT @LastRec = (@CurrentPage * @PageSize + 1) --计算页结束行
SELECT @dt= substring(convert(varchar,rand()),3,10) --一个字符型的随机数
--将搜索结果放入临时表中,表名随机生成,在' FROM '前插入'INTO '+随机临时表名
SELECT @SqlStr = stuff(@SqlStr, charindex(' FROM ',upper(@SqlStr)), 6 ,' INTO tempdb..Paging'+@dt+' FROM ')
EXECUTE (@SqlStr)
--为临时表增加id号
SELECT @SqlStr = 'ALTER TABLE tempdb..Paging'+@dt+' ADD TEMPDB_ID numeric(10) IDENTITY PRIMARY KEY'
EXECUTE (@SqlStr)
--计算临时表中的记录数
--SELECT @SqlStr = 'SELECT Count(*) From tempdb..Paging'+@dt
--EXECUTE (@SqlStr)
--选取记录号在起始行和结束行中间的记录
SELECT @SqlStr = 'SELECT * FROM tempdb..Paging' + @dt + ' WHERE TEMPDB_ID > ' + convert(varchar,@FirstRec) + ' and TEMPDB_ID < '+convert(varchar,@LastRec)
EXECUTE (@SqlStr)
--删除临时表
SELECT @SqlStr = 'DROP TABLE tempdb..Paging'+@dt
EXECUTE (@SqlStr)
END
/*
some comments:
1. @SqlStr varchar(8000), depends on your page size
2. this is a generic paging sp, if you just want to use it for specific table,
you'd better change the 'tempdb..Paging' to #Paging, the performance will be better
*/
create procedure splitpage @qry varchar(16384),@ipage int, @num int as /*@qry SQL语句, @ipage 页数, @num 每页记录条数 */
begin
declare @maxpages int
declare @rcount int
declare @execsql varchar(16384)
if @ipage>=100
select @maxpages=ceiling(count(*)/@num) from test
else
select @maxpages=100000
if @ipage<=@maxpages/2
begin
select @rcount=@ipage*@num
set rowcount @rcount
set @execsql = stuff(@qry,charindex('select',@qry),6,'select sybid=identity(12),')
set @execsql = stuff(@execsql, charindex('from',@execsql),4,'into #temptable1 from')
set @execsql = @execsql || ' select * from #temptable1 where sybid>' || convert(varchar,(@ipage-1)*@num) || ' and sybid <= ' || convert(varchar,@ipage*@num)
execute (@execsql)
end else
begin
select @rcount=(@maxpages-@ipage+1)*@num
set rowcount @rcount
set @execsql = stuff(@qry,charindex('select',@qry),6,'select sybid=identity(12),')
set @execsql = stuff(@execsql, charindex('from',@execsql),4,'into #temptable1 from')
set @execsql = @execsql || ' order by sybid desc'
set @execsql = @execsql || ' select * from #temptable1 where sybid > ' || convert(varchar,(@maxpages-@ipage)*@num) || ' and sybid <= ' || convert(varchar,(@maxpages-@ipage+1)*@num)
execute (@execsql)
end
end
select stuff(stuff(convert(char(10),getdate(),111),5,1,'-'),8,1,'-')as op_time
SELECT DATEFORMAT( '1989-01-01 01:02:03', 'hh:mm:ss' );会报错
getdate()
得到当前时间,可以设置得到各种时间格式.
datepart(日期部分,日期)
取指定时间的某一个部分,年月天时分秒.
datediff(日期部分,日期1,日期2)
计算指定的日期1和日期2的时间差多少.
dateadd(日期部分,数值表达式,日期)
计算指定时间,再加上表达式指定的时间长度.
--取时间的某一个部分
select datepart(yy,getdate()) --year
select datepart(mm,getdate()) --month
select datepart(dd,getdate()) --day
select datepart(hh,getdate()) --hour
select datepart(mi,getdate()) --min
select datepart(ss,getdate()) --sec
--取星期几
set datefirst 1
select datepart(weekday,getdate()) --weekday
--字符串时间
select getdate() -- '03/11/12'
select convert(char,getdate(),101) -- '09/27/2003'
select convert(char,getdate(),102) -- '2003.11.12'
select convert(char,getdate(),103) -- '27/09/2003'
select convert(char,getdate(),104) -- '27.09.2003'
select convert(char,getdate(),105) -- '27-09-2003'
select convert(char,getdate(),106) -- '27 Sep 2003'
select convert(char,getdate(),107) --'Sep 27, 2003'
select convert(char,getdate(),108) --'11:16:06'
select convert(char,getdate(),109) --'Sep 27 2003 11:16:28:746AM'
select convert(char,getdate(),110) --'09-27-2003'
select convert(char,getdate(),111) --'2003/09/27'
select convert(char,getdate(),112) --'20030927'
select rtrim(convert(char,getdate(),102))+' '+(convert(char,getdate(),108)) -- '2003.11.12 11:03:41'
--整数时间
select convert(int,convert(char(10),getdate(),112)) -- 20031112
select datepart(hh,getdate())*10000 + datepart(mi,getdate())*100 + datepart(ss,getdate()) -- 110646
--时间格式 "YYYY.MM.DD HH:MI:SS" 转换为 "YYYYMMDDHHMISS"
declare @a datetime,@tmp varchar(20),@tmp1 varchar(20)
select @a=convert(datetime,'2004.08.03 12:12:12')
select @tmp=convert(char(10),@a,112)
select @tmp
select @tmp1=convert(char(10),datepart(hh,@a)*10000 + datepart(mi,@a)*100 + datepart(ss,@a))
select @tmp1
select @tmp=@tmp+@tmp1
select @tmp
size=medium] 这两天一直在想怎么在现有系统上比较好的解决这个问题。能够跟现在的系统架构比较好的结合。原来的分页方法用的是ibatis自带的游标分页方法。 我们的调用的方法:Java代码 public List selectById...
最近一段时间做的这个项目用的是Sybase,用到了Sybase分页。在网上找了许多,Sybase分页都是用临时表来做的。最后找到了一个存储过程,不过这个存储过程如果直接用有一些问题,所以改了一下。还有就是Sybase存储过程...
1. 使用临时表方法: stmt = conn.getConn().createStatement(); String strsql = "select *, ids=identity(9) into #tb from tablename"; //表复制速度很快,不影响效率 stmt.execute
create procedure splitpage_sybase @qry varchar(16384),@ipage int, @num int,@maxpages int = 5000 as/*@qry SQL语句, @ipage 页数, @num 每页记录条数, @maxpages 最大查询页数 */
目前sybase分页: 1,hibernate分页:hibernate分页前几页和后几页没问题,如果数据量大翻到30000页时就内存溢出了。而且效率慢。 2,存储过程分页:使用存储过程分页大数据量也不适合。效率低而且不支持并发。 jdbc...
Sybase 本身是不支持sql语句,例如mssql的Top ,oracle的start with, 所以通过把数据复制到临时表,给临时表创建自增id,通过这个自增id来实现 sql语句如下: SELECT name , convert (varchar,id) as id , sybid=...
/*--sybase分页操作--*/ --方法1: --********************************************* --按起始记录条数与终结记录条数进行划分 --@sqlStr为普通查询语句,语句中不能包括表中已有 --的Identity类型字段,否则...
Reference: http://lippeng.iteye.com/blog/1555237
上一篇( Sybase 海量数据分页瞬间完成)是不支持排序的,这次又写了一个支持排序的,不过要在数据库排序列加上索引,并在程序中指定索引名字。(注:sybase的jdbc API不是很智能不指定就没用使用索引搞的速度很慢...
最后从网上找到的如下的两个分页存储过程: -- 按行读取 [code="java"]CREATE PROCEDURE GetDataByLine ( --创建一个分页读取过程 @SqlStr varchar(8000), --SQL语句 @FirstRec ...
在前一版本分页基础上修改BUG,连接没释放,小数据量查询慢,缓存没清除。重复缓存。
简介sybase数据库本身是不支持分页sql语句,想用mybatis操作sybase分页很麻烦,在网上也看了不少使用数据库存储过程解决的。 但总觉得局限性太大出现很多问题,所以本文介绍结合mybatis进行游标分页处理,不影响...
sybase分页优化带排序 http://blog.csdn.net/damenggege123/article/details/8930775
分页存储过程SQL: IF OBJECT_ID ('dbo.QueryPageList') IS NOT NULL DROP PROCEDURE dbo.QueryPageList GO create procedure dbo.QueryPageList ( @sqlStr varchar(8000), --sql语句 select id,name from ...
Reference: http://bbs.chinaunix.net/thread-1011442-1-1.html
sybase分页存储过程(代码),分页存储过程代码,实现sybase数据库分页查询。
最近某个甲方某个需求涉及到需要Sybase进行分页操作,从网上搜索若干种方案无果 绝望之际随手试了一个函数好像可以 select TOP 100 * from table_name where SYB_IDENTITY > 10000; 本人所用的sybase 版本
...前段时间发博,Sybase使用rank() over(order by id)ret的方式分页,这种方式在数据量达到40W条的时候很耗时,大概5S的时间,当达到千万条的时候,查询一次大概是1分40秒,这就远远不符合项目要
我们在SQLSERVER想要分页查询,需要用到TOP N来进行查询 但是sybase没有TOP函数,需要通过 Set RowCount来设置查询的数量 例如语句: Set RowCount 1000 select * from S_Test Set RowCount 0 ...
据说,ibatis的分页对于sybase数据库来说不太好用。
//这里不能使用一个sql语句完成分页,需要6步才能完成 String paginatedSql = this.wrapPaginatedSql(sql, firstElement, firstElement + maxElements); String rowcount = "set rowcount " + (firstElement + ...
SQL Server SELECT * FROM ( SELECT Top N * FROM (SELECT Top (M + N - 1) * FROM 表名称 Order by 主键 desc) t1 ) t2 Order by 主键 asc Oralce数据库 ...
这是一个分页的sql的总结,方法简单一看就懂
从12.5.3版本开始sybase支持top关键字,试着使用,但是未果(同事说sybase对top支持不好),因为不支持嵌套。使用的是如下的sql: select top 10 t1.AH, t1.BH from K_ZS..B_MS t1 where t1.BH not ...
Reference: http://database.51cto.com/art/201011/235484.htm
按行读取CREATE PROCEDURE GetDataByLine( --创建一个分页读取过程 @SqlStr varchar(8000), --SQL语句 @FirstRec int, --页起始行 @LastRec int --页结束行)ASDECLARE @dt varchar(10
2019独角兽企业重金招聘Python工程师标准>>> ...
最近各大电商平台不断持续放货,京东,天猫,苏宁,网易等,还有新加入的大军,酒仙网,,国美,华润万家和主播等等……给平台带去了巨大流量。 看到很多小伙伴都撸货撸到手发软,发财发到腿抽筋。一瓶几百+,你算算,这能赚多少钱。是不是不想上班的那种,上班一天才两三百,什么时候才能买到房子。 今天带来一个福利。那就是抢购软件,很实用。朋友圈好多都在用这个抢购。内有教程仔细阅读。最后祝每个伙伴都抢到 赚到
从0开始,Linux云计算系列课程,包含Linux初级运维、运维、初级架构师、云计算运维及开发..... a:0:{}
也许是中国第一个讲解android驱动的课程,涵盖: bootloader,内核移植,INIT进程,框架(BINDER IPC,SERVICE FRAMEWORK Activity Manager Serive,JNI,HAL等),binder驱动,logger,Ashmen,电源管理,常用驱动(如灯光系统,