海妖 发表于 2015-1-16 22:25:10

MSSQL网站制作之身份证考证

也就是说在php本地调用pdoprepare中的mysql_real_escape_string来操作query,使用的是本地单字节字符集,即编码为xbfx5cx27,并带入到mysql中查询,由于使用setnames设置了连接字符集.

alterfunctiondbo.IDTrue--考证十八位身份证是不是准确
(
@IDvarchar(18)
)
returnsbit
as
begin
--考证格局是不是准确
declare@RESbit
declare@Wtable(rnint,valint)
insertinto@W(rn,val)
select1,7
unionselect2,9
unionselect3,10
unionselect4,5
unionselect5,8
unionselect6,4
unionselect7,2
unionselect8,1
unionselect9,6
unionselect10,3
unionselect11,7
unionselect12,9
unionselect13,10
unionselect14,5
unionselect15,8
unionselect16,4
unionselect17,2
unionselect18,1
declare@Atable(rwnint,valvarchar(1))
insertinto@A(rwn,val)
select0,1
insertinto@A(rwn,val)
select1,0
insertinto@A(rwn,val)
select2,X
insertinto@A(rwn,val)
select3,9
insertinto@A(rwn,val)
select4,8
insertinto@A(rwn,val)
select5,7
insertinto@A(rwn,val)
select6,6
insertinto@A(rwn,val)
select7,5
insertinto@A(rwn,val)
select8,4
insertinto@A(rwn,val)
select9,3
insertinto@A(rwn,val)
select10,2
declare@iint
declare@jint
declare@Sint

iflen(@ID)=18
begin
select@S=0,@i=1
declare@IDIint
declare@WIint
declare@PIIvarchar(1)
while@i<=17
begin
select@PII=substring(@ID,@i,1)
if@PIIlike
begin
select@IDI=convert(int,@PII)
select@WI=valfrom@Wwherern=@i
select@j=@IDI*@WI
select@S=@S+@j
select@i=@i+1
end
else
begin
select@RES=0
return@RES
end

end
select@S=@S%11
select@IDI=convert(int,substring(@ID,18,1))
declare@pivarchar(1)
select@pi=valfrom@Awhererwn=@S
if@pi=@IDI
select@RES=1
else
select@RES=0
end
else
begin
select@RES=0
end
return@RES
end
go
declare@pcbit
select@pc=dbo.IDTrue(420324198101031224)
select@pc
go

alterfunctionSFZ15To18--十五位升十八
(
@sfzvarchar(15)
)
returnsvarchar(18)
as
begin
declare@Wtable(rnint,valint)
insertinto@W(rn,val)
select1,7
unionselect2,9
unionselect3,10
unionselect4,5
unionselect5,8
unionselect6,4
unionselect7,2
unionselect8,1
unionselect9,6
unionselect10,3
unionselect11,7
unionselect12,9
unionselect13,10
unionselect14,5
unionselect15,8
unionselect16,4
unionselect17,2
unionselect18,1
declare@Atable(rwnint,valvarchar(1))
insertinto@A(rwn,val)
select0,1
insertinto@A(rwn,val)
select1,0
insertinto@A(rwn,val)
select2,X
insertinto@A(rwn,val)
select3,9
insertinto@A(rwn,val)
select4,8
insertinto@A(rwn,val)
select5,7
insertinto@A(rwn,val)
select6,6
insertinto@A(rwn,val)
select7,5
insertinto@A(rwn,val)
select8,4
insertinto@A(rwn,val)
select9,3
insertinto@A(rwn,val)
select10,2
declare@NEWIDvarchar(18)
select@NEWID=substring(@sfz,1,6)+19+substring(@sfz,7,9)
declare@iint
declare@jint
declare@Sint
select@S=0,@i=1
declare@IDIint
declare@WIint
declare@PIIvarchar(1)
while@i<=17
begin
select@PII=substring(@NEWID,@i,1)
if@PIIlike
begin
select@IDI=convert(int,@PII)
select@WI=valfrom@Wwherern=@i
select@j=@IDI*@WI
select@S=@S+@j
select@i=@i+1
end
else
begin
return
end
end
select@S=@S%11
declare@pivarchar(1)
select@pi=valfrom@Awhererwn=@S
select@NEWID=@NEWID+@pi
return@NEWID

end
go
selectdbo.SFZ15To18(420324810103153)
go
--日期是不是准确
alterfunctionChkYMD(
@yint,
@mtinyint,
@dtinyint,
@cyint
)
returnsbit
as
begin
declare@resbit
select@res=1
if@y<1900or@y>@cy
begin
select@res=0
return@res
end
if@m=1or@m=3or@m=5or@m=7or@m=8or@m=10or@m=12
begin
if(@d<1)or(@d>31)
begin
select@res=0
return@res
end
end

if@m=2
begin
if((@y%4)=0)and((@y%100)0)or((@y%400)=0)
begin--闰年
if(@d<1)or(@d>29)
begin
select@res=0
return@res
end
endelse
begin
if(@d<1)or(@d>28)
begin
select@res=0
return@res
end
end

end
if@m=4or@m=6or@m=9or@m=11
begin
if(@d<1)or(@d>30)
begin
select@res=0
return@res
end
end
return@res

end
go
selectdbo.chkymd(1981,1,3,Year(getdate()))
go
/*
y:年,m:月,d:日。在参数都只传进响应的整数
前往值:0礼拜一
1礼拜2
2礼拜3
3礼拜4
4礼拜5
5礼拜6
6礼拜7
*/

alterfunctionGetWeekDay(
@yint,
@mint,
@dint
)
returnstinyint
as
begin
declare@atinyint
select@a=7
if@m=1or@m=2
begin
select@m=@m+12
select@y=@y-1
end
select@a=(@d+2*@m+3*(@m+1)/5+@y+@y/4-@y/100+@y/400)%7;
return@a
end
go
selectdbo.getweekday(2004,12,10)
Mysql的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。

海妖 发表于 2015-1-19 11:12:55

如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.

仓酷云 发表于 2015-1-25 08:39:33

如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。

第二个灵魂 发表于 2015-2-2 18:32:44

所以你总能得到相应的升级版本,来满足你的需求。

admin 发表于 2015-2-8 04:20:37

我们学到了什么?思考问题的时候从表的角度来思考问

精灵巫婆 发表于 2015-2-24 06:27:50

但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右)

不帅 发表于 2015-3-15 05:13:07

换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的

爱飞 发表于 2015-3-21 18:48:48

理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
页: [1]
查看完整版本: MSSQL网站制作之身份证考证