|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
限制,如果WHERE子句的查询条件里有不等号(WHEREcoloum!=),MySQL将无法使用索引。类似地,如果WHERE子句的查询条件里使用了函数(WHEREDAY(column)=),MySQL也将无法使用索引。存储历程|流水号
网友发问:
---------------------------------------
Test1表
IDstartend
115
2610
32125
42630
55160
但愿失掉了局:
string:1-10,21-30,51-60
---------------------------------------
用变量拼接字串的解法:
--建测试表:
createtabletest1(idint,startint,[end]int)
--增加测试数据:
inserttest1select1,1,5
unionselect2,6,10
unionselect3,21,25
unionselect4,26,30
unionselect5,51,60
--创建拼接字串的函数:
createprocedureproA
as
begin
declare@svarchar(8000)
--给变量赋表中第一行的响应值,cast(min(start)-1这里是为了共同前面的全表查询中的第一行给准确地接上。注重,假如流水号是从0入手下手,-要响应用其他字符如“+”号替换,最初select@s时,再改回‘-’号,详细的语句是:selectreplace(@s,+,-):
select@s=+cast(min(start)asvarchar(10))+-
+cast(min(start)-1asvarchar(10))
fromtest1
--按次查询并拼接字串:
select@s=left(@s,len(@s)-charindex(-,reverse(@s))+1)
+casewhencast(right(@s,charindex(-,reverse(@s))-1)asint)+1
=start
thencast([end]asvarchar(20))
elseright(@s,charindex(-,reverse(@s))-1)+,
+cast(startasvarchar(10))+-
+cast([end]asvarchar(10))
end
fromtest1
orderbystart
--前往了局:
select@s
end
--删除测试表:
droptabletest1
Mysql的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。 |
|