SQL SERVER 2000中查询新身份证(18位)的校验位的函数

SQL SERVER 2000中查询新身份证(18位)的校验位的函数
根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组
合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数
字出生日期码,三位数字顺序码和一位数字校验码。

地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。生日期码表示编码对象出生的年、月、
日,其中年份用四位数字表示,年、月、日之间不用分隔符。顺序码表示同一地址码所标识的区域范围内,
对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十
七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。下面举例说明该计算方法。

15位的身份证编码首先把出生年扩展为4位,简单的就是增加一个19,但是这对于1900年出生的人不
使用(这样的寿星不多了)

某男性公民身份号码本体码为34052419800101001,首先按照公式⑴计算:
∑(ai×Wi)(mod 11)……………………………………(1)
公式(1)中:
i----表示号码字符从由至左包括校验码在内的位置序号;
ai----表示第i位置上的号码字符值;
Wi----示第i位置上的加权因子,其数值依据公式Wi=2(n-1)(mod 11)计算得出。

i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
ai 3 4 0 5 2 4 1 9 8 0 0 1 0 1 0 0 1 a1
Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
ai×Wi 21 36 0 25 16 16 2 9 48 0 0 9 0 5 0 0 2 a1
根据公式(1)进行计算:
∑(ai×Wi) =(21+36+0+25+16+16+2+9+48++0+0+9+0+5+0+0+2) = 189
189 ÷ 11 = 17 + 2/11
∑(ai×Wi)(mod 11) = 2
然后根据计算的结果,从下面的表中查出相应的校验码,其中X表示计算结果为10:
∑(ai×WI)(mod 11) 0 1 2 3 4 5 6 7 8 9 10
校验码字符值ai 1 0 X 9 8 7 6 5 4 3 2
根据上表,查出计算结果为2的校验码为所以该人员的公民身份号码应该为 34052419800101001X。

a[0]*7+a[1]*9+a[2]*10+a[3]*5+a[4]*8+a[5]*4+a[6]*2+a[7]*1+a[8]*6+a[9]*3
+a[10]*7+a[11]*9+a[12]*10+a[13]*5+a[14]*8+a[15]*4+a[16]*2
%11

when 0 then '1' when 1 then '0' when 2 then 'X' when 3 then '9'
when 4 then '8' when 5 then '7' when 6 then '6' when 7 then '5'
when 8 then '4' when 9 then '3' when 10 then '2'

*/

以上为算法详细说明,下面是SQL的自定义函数,返回值为18位的校验码
Create function getCheckCode(@SFZH char(18))
Returns char(1)
As
Begin
declare @r char(1)
declare @i int
if len(@SFZH) <> 18
set @r = '?'
else
set @i = cast(substring(@SFZH,1,1) as int) * 7
+cast(substring(@SFZH,2,1) as int) * 9
+cast(substring(@SFZH,3,1) as int) * 10
+cast(substring(@SFZH,4,1) as int) * 5
+cast(substring(@SFZH,5,1) as int) * 8
+cast(substring(@SFZH,6,1) as int) * 4
+cast(substring(@SFZH,7,1) as int) * 2
+cast(substring(@SFZH,8,1) as int) * 1
+cast(substring(@SFZH,9,1) as int) * 6
+cast(substring(@SFZH,10,1) as int) * 3
+cast(substring(@SFZH,11,1) as int) * 7
+cast(substring(@SFZH,12,1) as int) * 9
+cast(substring(@SFZH,13,1) as int) * 10
+cast(substring(@SFZH,14,1) as int) * 5
+cast(substring(@SFZH,15,1) as int) * 8
+cast(substring(@SFZH,16,1) as int) * 4
+cast(substring(@SFZH,17,1) as int) * 2
set @i = @i - @i/11 * 11
set @r = (case @i
when 0 then '1' when 1 then '0' when 2 then 'X' when 3 then '9'
when 4 then '8' when 5 then '7' when 6 then '6' when 7 then '5'
when 8 then '4' when 9 then '3' when 10 then '2' else '/' end)
Return(@r)
End

/* Usage:
select dbo.getcheckcode('身份证号')

作者: 陆岛工作室

陆岛工作室
关注 - 1
粉丝 - 0

关注博主
0
0

(请您对文章做出评价)
« 上一篇:查询 SQL SERVER 的版本号

» 下一篇:如何从SQL Server 中取得字段说明
posted @ 2008-06-06 00:03 陆岛工作室 阅读(258) 评论(1) 编辑 收藏
所属分类: SQL Server/ORACLE

合集下载

验证身份证号是否正确的公式、通过身份证号提取出生年月、性别、年龄等的公式汇总

验证身份证号是否正确的公式、通过身份证号提取出生年月、性别、年龄等的公式汇总

身份证号验证:=IF(LEN(身份证号所在单元格)=0,"空",IF(LEN(身份证号所在单元格)=15,"老号",IF(LEN(身份证号所在单元格)<>18,"位数不对",IF(CHOOSE(MOD(SUM(MID(身份证号所在单元格,1,1)*7+MID(身份证号所在单元格,2,1)*9+MID(身份证号所在单元格,3,1)*10+MID(身份证号所在单元格,4,1)*5+MID(身份证号所在单元格,5,1)*8+MID(身份证号所在单元格,6,1)*4+MID(身份证号所在单元格,7,1)*2+MID(身份证号所在单元格,8,1)*1+MID(身份证号所在单元格,9,1)*6+MID(身份证号所在单元格,10,1)*3+MID(身份证号所在单元格,11,1)*7+MID(身份证号所在单元格,12,1)*9+MID(身份证号所在单元格,13,1)*10+MID(身份证号所在单元格,14,1)*5+MID(身份证号所在单元格,15,1)*8+MID(身份证号所在单元格,16,1)*4+MID(身份证号所在单元格,17,1)*2),11)+1,1,0,"X",9,8,7,6,5,4,3,2)=IF(ISNUMBER(RIGHT(身份证号所在单元格,1)*1),RIGHT(身份证号所在单元格,1)*1,"X"),"正确","错误"))))性别:=IFERROR(IF(MOD(VALUE(MID(身份证号所在单元格,17,1)),2)=1,"男","女"),"")年龄:=IFERROR(YEAR(NOW())-VALUE(MID(身份证号所在单元格,7,4)),"")出生年月日:=CONCATENATE(MID(身份证号所在单元格,7,4),"-",MID(身份证号所在单元格,11,2),"-",MID(身份证号所在单元格,13,2))是否农村青壮年(女16至45、男16至50):=IF(户口性质<>"农业户口","否",IF(AND(性别="女",G4>=16,G4<=45),"是",IF(AND(性别="男",G4>=16,G4<=50),"是","否")))照片插入:第一步:新建一寸照文件夹为“目标文件夹”,照片命名例:99人以内(01+姓名),999人以内(001+姓名)第二步:在基础信息表内输入公式:=”照片源地址”&\”&序号栏&姓名栏&”.jpg”输入公式后,把公式内所有的“\”都换为“\\”;序号要求:99人以内从01开始,999人以内从001开始;第三步:到WORD文档,建立表格,并使光标在照片格“插入”→“文档部件”→“域”→“includepicture”→域属性输入“123”→FN+ALT+F9→把先前输入的“123”删除,在邮件合并内找输入合并域,选择“照片栏”→FN+F9。

SQL SERVER 2000中查询指定节点及其所有子节点的函数(字符串形式显示)

SQL SERVER 2000中查询指定节点及其所有子节点的函数(字符串形式显示)

标题:SQL SERVER 2000中查询指定节点及其所有子节点的函数(字符串形式显示)--生成测试数据create table tb(id varchar(3) , pid varchar(3) , name varchar(10))insert into tb values('001' , null , '广东省')insert into tb values('002' , '001' , '广州市')insert into tb values('003' , '001' , '深圳市')insert into tb values('004' , '002' , '天河区')insert into tb values('005' , '003' , '罗湖区')insert into tb values('006' , '003' , '福田区')insert into tb values('007' , '003' , '宝安区')insert into tb values('008' , '007' , '西乡镇')insert into tb values('009' , '007' , '龙华镇')insert into tb values('010' , '007' , '松岗镇')go--创建用户定义函数create function f_cid(@id varchar(10)) returns varchar(8000)asbegindeclare @i int , @ret varchar(8000)declare @t table(id varchar(10) , pid varchar(10) , level int)set @i = 1insert into @t select id , pid , @i from tb where id = @idwhile @@rowcount <> 0beginset @i = @i + 1insert into @t select a.id , a.pid , @i from tb a , @t b where a.pid = b.id and b.level = @i - 1 endselect @ret = isnull(@ret , '') + id + ',' from @treturn left(@ret , len(@ret) - 1)endgo--执行查询select id , children = isnull(dbo.f_cid(id) , '') from tb group by iddrop table tbdrop function f_cid*标题:SQL SERVER 2005中查询指定节点及其所有子节点的函数(表格形式显示) 作者:爱新觉罗·毓华(十八年风雨,守得冰山雪莲花开)时间:2010-02-02地点:新疆乌鲁木齐*/create table tb(id varchar(3) , pid varchar(3) , name nvarchar(10))insert into tb values('001' , null , N'广东省')insert into tb values('002' , '001' , N'广州市')insert into tb values('003' , '001' , N'深圳市')insert into tb values('004' , '002' , N'天河区')insert into tb values('005' , '003' , N'罗湖区')insert into tb values('006' , '003' , N'福田区')insert into tb values('007' , '003' , N'宝安区')insert into tb values('008' , '007' , N'西乡镇')insert into tb values('009' , '007' , N'龙华镇')insert into tb values('010' , '007' , N'松岗镇')goDECLARE @ID V ARCHAR(3)--查询ID = '001'的所有子节点SET @ID = '001';WITH T AS(SELECT ID , PID , NAMEFROM TBWHERE ID = @IDUNION ALLSELECT A.ID , A.PID , FROM TB AS A JOIN T AS B ON A.PID = B.ID)SELECT * FROM T ORDER BY ID/*ID PID NAME---- ---- ----------001 NULL 广东省002 001 广州市003 001 深圳市004 002 天河区005 003 罗湖区006 003 福田区007 003 宝安区008 007 西乡镇009 007 龙华镇010 007 松岗镇(10 行受影响)*/--查询ID = '002'的所有子节点SET @ID = '002';WITH T AS(SELECT ID , PID , NAMEFROM TBWHERE ID = @IDUNION ALLSELECT A.ID , A.PID , FROM TB AS A JOIN T AS B ON A.PID = B.ID )SELECT * FROM T ORDER BY ID/*ID PID NAME---- ---- ----------002 001 广州市004 002 天河区(2 行受影响)*/--查询ID = '003'的所有子节点SET @ID = '003';WITH T AS(SELECT ID , PID , NAMEFROM TBWHERE ID = @IDUNION ALLSELECT A.ID , A.PID , FROM TB AS A JOIN T AS B ON A.PID = B.ID )SELECT * FROM T ORDER BY ID。

sqlserver len函数

sqlserver len函数

sqlserver len函数 1. 什么是sqlserver len函数 在SQL Server中,LEN函数用于计算一个字符串的字符个数。它返回指定字符串的长度,不包括尾随空格。LEN函数对于处理字符串数据非常有用,可以用于各种查询和数据操作中。

2. LEN函数的使用方法 LEN函数可以用于计算字符串、变量和列的长度。以下是LEN函数的使用方法:

2.1 计算字符串的长度 SELECT LEN('Hello World') AS StringLength;

输出结果为11,表示字符串’Hello World’的字符个数为11。

2.2 计算变量的长度 DECLARE @str VARCHAR(20) = 'Hello World'; SELECT LEN(@str) AS StringLength;

输出结果同样为11,表示变量@str的字符个数为11。

2.3 计算列的长度 假设我们有一个名为employees的表,其中包含一个名为name的列。我们可以使用LEN函数计算每个员工姓名的长度:

SELECT name, LEN(name) AS NameLength FROM employees;

这将返回每个员工姓名及其对应的长度。

3. LEN函数的注意事项和限制 使用LEN函数时需要注意以下事项和限制: 3.1 字符串的长度限制 LEN函数的返回值类型是整数,可以返回的最大长度为2^31-1,即2,147,483,647个字符。

3.2 适用于各种数据类型 LEN函数适用于各种数据类型,包括字符型、二进制型和文本型。

3.3 字符串的编码方式 LEN函数计算的是字符串的字符数,不考虑编码方式。对于Unicode字符,每个字符使用2个字节存储,而对于非Unicode字符,每个字符使用1个字节存储。

3.4 计算字符串的长度时的注意事项 在计算字符串的长度时,LEN函数会自动删除尾随空格。如果需要保留尾随空格,可以使用DATALENGTH函数来获取字符串的字节数。

用Excel计算身份证第18位(校验码)

用Excel计算身份证第18位(校验码)
身份证第18位(校验码)的计算方法
十年后,我连log是什么都不知道,但还是可以活得好好的!
是这样吗?
JUNE.作 . 品
身份证中包含着我们诸多的信息:比如家庭住址、出生年月、性别等。 可是大家见没见过有同学的身份证数字里有“X”的吗?它是什么含义呢?
籍贯
411322 19910621 061 6
出生日期 性别
首先我们得出前17位的乘积和是259,然后用259除以11得出的结果是13+6, 也就是说其余数是6。最后通过对应规则就可以知道余数6对应的数字是6。所 以,可以判定这是一个合格的身份证号码
我们来现场演示一下吧!
李刚, 拿你的身份证号来。。。
MID("10X98765432",MOD(SUM(MOD(2^(18-ROW($1:$17)),11)*MID(A1,ROW($1:$17),1)),11)+1,1)
你们这样的人是不是想找一个像EXCEL一样的基友——想隐藏就隐藏,想筛选就筛选,想 删除就删除,一个不高兴,嘿,我还就不保存了。
5、通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的 Ⅹ。如果余数是10,身份证的最后一位号码就是2。 例如:某下图的身份证号码是411322199106210616。我们要看看这个身份证 是不是合法的身份证。
验证码
1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的 系数分别为:
7-9-10-5-8-4-2-1-6-3-7-9-的结果相加。
Heavy metal
3、用加出来和除以11,看余数是多少? 4、余数只可能有0-1-2-3-4-5-6-7-8-9-10 这11个数字。其分别 对应的最后一位身份证的号码为1-0-X-9-8-7-6-5-4-3-2。

ORACLE对身份证号码处理的相关SQL汇总

ORACLE对身份证号码处理的相关SQL汇总

ORACLE对身份证号码处理相关的SQL汇总身份证号码算法及应用场景:工作实践总结,与大家分享快乐,并请高人批评指正,努力改进:目前我国大量存在着正在有效期的15位身份证,虽然国家在推行二代身份证,但尚未发现强行要求全国人民更换未到期的15位身份证的官方声明或公告。

扯远了:),总之合法的15位身份证号码将在今后一段时间内继续存在下去。

另外,项目中往往有着大量的历史数据,我们的一个系统中15位身份证所占比重很大,因此系统必须实现对两套身份证编码的职能处理,并支持另外一种特殊证件类型:军官证/警官证。

本文重点讨论15位/18位身份证的处理问题众所周知,我们现执行的身份证号码编码由公安部具体落实编码规则,有15位/18位两种,公安部以数学语言描述的方式公开了身份证编码规则和位码含义,但具体到计算机语言实现,需要开发人员自行根据算法设计。

本文主要以oracle的SQL为例子,其他语言大家可以自行转换,道理都是一样的。

这里以ORACLE为例,其他数据库类似:CREATE OR REPLACE function ID15TO18(p_OldID varchar2) return varchar2 istype TIArray is table of integer;type TCArray is table of char(1);Result varchar2(18);W TIArray;A TCArray;S integer;beginif Length(p_OldID) <> 15 OR NOT ISIDCARD(p_OldID) thenraise_application_error(-20999, '不是旧15位身份证号或者不是身份证号');Result := p_OldID;elseW := TIArray(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);A := TCArray('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');Result := SubStr(p_OldID, 1, 6) || '19' || SubStr(p_OldID, 7, 9);S := 0;beginfor i in 1 .. 17 loopS := S + to_number(SubStr(Result, i, 1)) * W(i);end loop;exceptionwhen others thenreturn '';end;S := S mod 11;Result := Result || A(s + 1);end if;return(Result);end ID15TO18;/CREATE OR REPLACE function isIDCard(p_IDcard varchar2) return boolean isIDcardlen integer;beginIDcardlen :=Length(p_IDcard);/*if (IDcardlen = 18 and IS_NUMBER(SubStr(p_IDcard, 1, IDcardlen-1))and IS_DATE (substr(p_IDcard,7,8)))or(IDcardlen = 15 and IS_NUMBER(SubStr(p_IDcard, 1, IDcardlen))and IS_DATE ('19' || subsTR(p_IDcard,7,6)))*/if (IDcardlen = 18)or(IDcardlen = 15 )thenreturn TRUE;ELSEreturn FALSE;end if;end isIDCard;/CREATE OR REPLACE FUNCTION is_number (str IN VARCHAR2)RETURN NUMBERISBEGINIF str IS NULLTHENRETURN 0;ELSEIF regexp_like (str, '^(-{0,1} {0,1})[0-9] (.{0,1}[0-9] )$')THENRETURN 1;ELSERETURN 0;END IF;END IF;END is_number;/CREATE OR REPLACE function getAge(p_IDcard varchar2) return integer is IDcardlen integer;IDcardyear integer;beginIDcardlen :=Length(p_IDcard);if isidcard(p_IDcard) and IDcardlen = 18 thenIDcardyear := to_number(substr(p_IDcard,7,4));end if;if isidcard(p_IDcard) and IDcardlen = 15 thenIDcardyear := to_number('19'||substr(p_IDcard,7,2));end if;return to_number(to_char(sysdate,'yyyy'))-IDcardyear;end getAge;/CREATE OR REPLACE function getSex(p_IDcard varchar2) return varchar2 is IDcardlen integer;beginIDcardlen :=Length(p_IDcard);if not isidcard(p_IDcard)thenreturn null;end if;if IDcardlen = 18 and Substr(p_IDcard,17,1) in (1,3,5,7,9) then return ('男');end if;if IDcardlen = 18 and Substr(p_IDcard,17,1) in (2,4,6,8,0)then return ('女');end if;if IDcardlen = 15 and Substr(p_IDcard,15,1) in (1,3,5,7,9) then return ('男');end if;if IDcardlen = 15 and Substr(p_IDcard,15,1) in (2,4,6,8,0)then return ('女');end if;end getSex;//* Formatted on 2009/05/22 13:35 (Formatter Plus v4.8.6) */ CREATE OR REPLACE FUNCTION is_date (in_date IN VARCHAR2) RETURN BOOLEANISv_date_value DATE;invalid_day EXCEPTION;invalid_month EXCEPTION;PRAGMA EXCEPTION_INIT (invalid_day, -1839);PRAGMA EXCEPTION_INIT (invalid_month, -1843);BEGINSELECT TO_DATE (in_date, 'YYYY-MM-DD')INTO v_date_valueFROM DUAL;RETURN TRUE;EXCEPTIONWHEN invalid_dayTHENRETURN FALSE;WHEN invalid_monthTHENRETURN FALSE;WHEN OTHERSTHENRETURN FALSE;END is_date;/。

sql2000数据库函数大全

sql2000数据库函数大全

sqlserver2000函数大全SQL其实还是蛮重要的,省掉了许多程序中的处理,快捷方便字符串函数:●ASCII('a')=97---返回字母a对应的ASCII码●CHAR('48')=0---返回48这个ASCII码对应的字符●LCASE('ABcdE')="abced" 或LOWER('ABcdE')="abced"(将给定字符串转为小写)●UCASE('ABcdE')="ABCDE" 或UPPER('ABcdE')="ABCDE"(将给定字符串转为大写)●LTRIM(' fgf g h ')="fgf gh "(去掉给定字符串左边的空格)●RTRIM(' fgf gh ')=" fgf gh"(去掉给定字符串右边的空格)●LEN('sde123-TRE')=10(返回给定字符串的长度)●LEFT('sde123-TRE',5)="sde12"(从给定字符串左边开始,取指定长度的字符)●RIGHT('sde123-TRE',4)="-TRE"(从给定字符串右边开始,取指定长度的字符)●SUBSTRING('sde123-TRE',3,6)="e123-T"(从给定字符串的指定位置开始,取指定长度的字符)●CHARINDEX('23-','sde123-TRE')=5(返回第一个字符串在第二个字符串中出现的首位置,如果未出现则返回0)(注意:CHARINDEX('23T','sde123-TRE')=0)(注意:CHARINDEX('TRE','DFTRE345TREDGS')=3而CHARINDEX('TRE','DFTRE345TREDGS',4)=9,因为第三个参数未写则查找从第一个字符开始;否则从第三个参数指定的位置开始查找;第二个例子是从第4位开始查找,找到的第一个"TRE"位于第9位)●REVERSE('SDF463')="364FDS"(将给定字符串反转)●REPLACE('abcdefghicde','cde','xx')="abxxfghixx"(用第三个字符串替换第一个字符串中的所有第二个字符串)●STR(123.457,5,2)="123.46"(将数字转为字符串,第一个参数是要转换的数字,第二个参数是转换后的字符串的最大长度,第三个参数指定保留几位小数,请注意,这种转换是四舍五入的)(注意:STR(123.457,2,2)="**"------因为5小于123.457的长度)●STUFF('I AM NIMMY,WEI COME!',6,5,'RWM')="I AM RWM,WEI COME!"(将给定字符串中的某一部分删除并插入指定的字符串,第一个参数是待操作的字符串;第二个参数是要删除部分的起始位置;第三个参数是要删除部分的长度;第四个参数是要插入的字符串)(注意它和REPLACE的区别:STUFF('ERTY23TY',3,2,'K')='ERK23TY"而REPLACE('ERTY23TY','TY','K')="ERK23K")●REPLICATE('ab',6)="abababababab"(返回指定数量的指定字符串)●SPACE(6)=" "(返回指定数量的空格)***********************************************************日期函数●DATEPART() 返回给定日期的指定部分DATEPART(yy,'2003-12-27')=2003-------year/yyyy同义函数:year('2003-12-27')=2003DATEPART(mm,'2003-12-27')=12----month/m同义函数:month('2003-12-27')=12DATEPART(dd,'2003-12-27')=27----day/d同义函数:day('2003-12-27')=27DATEPART(dw,'2003-12-27')=7-----weekday(该日是一周的第七天,即星期六)DATEPART(hh,'13:55:34')=13------hourDATEPART(mi,'13:55:34')=55------minute/nDATEPART(ss,'13:55:34')=34------second/s●DATEADD(mm,2,'2003-12-27')="2003-2-27"(返回给定日期之后或之前的日期,第一个参数是递增的刻度,可以是年月日时分秒<见上>,第二个参数是递增数目,第三个参数是给定日期)●DATEDIFF(dd,'2003-12-23','2003-12-27')=4(返回两个给定日期之差,第一个参数指明差别的刻度,可以是年月日时分秒<见上>,第二个参数是开始日期,第二参数是结束日期)●DATENAME(dw,'2003-12-27')="星期六"(返回给定日期的指定名称,第一个参数指明要返回的名称类型,可以是年月日星期时分秒<见上>,第二个参数是给定日期)***************************************************************数学函数●ABS(-2)=2 返回一个数字的绝对值●返回大于等于参数的最小整数CEILING(1.2)=2/CEILING(1.7)=2/CEILING(2)=2CEILING(-1.2)=-1/CEILING(-1.7)=-1/CEILING(-1)=-1●返回小于等于参数的最大整数FLOOR(1.2)=1/FLOOR(1.7)=1/FLOOR(1)=1FLOOR(-1.2)=-2/FLOOR(-1.7)=-2/FLOOR(-2)=-2●返回四舍五入的指定位数的小数ROUND(1.2,0)=1/ROUND(1.7,0)=2/ROUND(2,0)=2ROUND(-1.2,0)=-1/ROUND(-1.7,0)=-2/ROUND(-2,0)=-2ROUND(1.3536,2)=1.35/ROUND(1.3536,3)=1.354●SQUARE(9)=81/ 返回参数的平方●SQRT(9)=3/ 返回参数的平方根●SIGN(0.01)=1/SIGN(1000)=1/SIGN(0)=0/SIGN(-0.3)=-1/SIGN(-10000)=-1判断参数是正数,负数还是0聚集函数:avg,求平均值count,统计记录的条数max,求最大值min,求最小值range,计算所选行的最大值与最小值的差stdev,计算所选行的标准偏差sum,求和函数variance,函数返回值样本的方差做为所有选择行的方差的无偏估计。

sql server 常用的函数

SQL Server 是一种关系型数据库管理系统,广泛应用于企业和个人的数据存储和管理。

在 SQL Server 中,函数是一种非常重要的功能,用于对数据进行处理和计算。

本文将介绍 SQL Server 中常用的函数,包括数学函数、字符串函数、日期时间函数等,并给出相应的示例和用法说明。

一、数学函数1. ABS():返回一个数的绝对值。

示例:SELECT ABS(-10) as Result;结果:102. ROUND():将一个数四舍五入到指定的小数位数。

示例:SELECT ROUND(3.14159, 2) as Result;结果:3.143. POWER():返回给定数的指定次幂。

示例:SELECT POWER(2, 3) as Result;结果:84. CEILING():返回大于或等于指定表达式的最小整数。

示例:SELECT CEILING(3.14) as Result;结果:45. FLOOR():返回小于或等于指定表达式的最大整数。

示例:SELECT FLOOR(3.14) as Result;结果:3二、字符串函数1. LEN():返回指定字符串的长度。

示例:SELECT LEN('Hello') as Result;结果:52. UPPER():将字符串转换为大写字母。

示例:SELECT UPPER('hello') as Result;结果:HELLO3. LOWER():将字符串转换为小写字母。

示例:SELECT LOWER('HELLO') as Result;结果:hello4. LEFT():返回字符串左边指定长度的子串。

示例:SELECT LEFT('Hello', 3) as Result;结果:Hel5. RIGHT():返回字符串右边指定长度的子串。

示例:SELECT RIGHT('Hello', 3) as Result;结果:llo三、日期时间函数1. GETDATE():返回当前的系统日期和时间。

sql server 存储过程 正则校验参数

sql server 存储过程正则校验参数摘要:1.SQL Server 存储过程的概念和作用2.正则表达式在SQL Server 存储过程中的应用3.如何在SQL Server 存储过程中进行参数校验4.存储过程参数校验的优点和注意事项正文:一、SQL Server 存储过程的概念和作用SQL Server 存储过程是一种预编译的T-SQL 代码,用于执行特定的任务。

它可以包含逻辑控制语句、数据操作语句和业务逻辑处理等。

存储过程在SQL Server 中具有很高的性能,因为它们是预编译的,可以减少查询和修改的开销。

此外,存储过程还可以提高代码的可维护性和安全性,通过参数化查询和数据校验等手段防止SQL 注入攻击。

二、正则表达式在SQL Server 存储过程中的应用正则表达式是一种强大的文本处理工具,可以用于检查字符串是否符合特定的模式。

在SQL Server 存储过程中,可以使用正则表达式对输入参数进行校验,确保数据的正确性和合法性。

在SQL Server 中,可以使用`REPLACE`和`PATINDEX`等函数来实现正则表达式的应用。

三、如何在SQL Server 存储过程中进行参数校验在SQL Server 存储过程中,可以通过以下步骤对参数进行校验:1.使用`@param`为参数指定一个名称,以便在存储过程中引用。

2.使用`REPLACE`函数检查参数值中是否包含不允许的字符或字符串。

3.使用`PATINDEX`函数检查参数值是否符合正则表达式的模式。

4.如果参数值不符合要求,则返回错误信息或抛出异常。

四、存储过程参数校验的优点和注意事项存储过程参数校验的优点包括:1.可以确保输入数据的正确性和合法性,提高应用程序的稳定性和可靠性。

2.可以减少SQL 注入等安全风险,提高数据的安全性。

3.可以简化代码维护,方便对参数进行修改和扩展。

在使用存储过程进行参数校验时,应注意以下几点:1.确保正则表达式的正确性和有效性,避免出现匹配错误或无效匹配。

sql server 常用系统函数

sql server 常用系统函数SQL Server是一款常用的关系型数据库管理系统,它提供了许多强大的系统函数来方便开发人员进行数据处理和管理。

本文将介绍SQL Server常用的系统函数,包括日期时间函数、字符串函数、数学函数、聚合函数等。

一、日期时间函数1. GETDATE():获取当前日期时间。

2. DATEADD():在日期上进行加减操作。

3. DATEDIFF():计算两个日期之间的差值。

4. DATEPART():从日期中提取特定部分的值,如年、月、日、小时、分钟等。

5. CONVERT():将日期时间类型转换为其他类型(如字符串)。

二、字符串函数1. LEN():获取字符串长度。

2. LEFT()、RIGHT()、SUBSTRING():获取字符串的左、右、子字符串。

3. REPLACE():替换字符串中的指定子串。

4. CHARINDEX():查找指定子串在字符串中的位置。

5. LTRIM()、RTRIM():去除字符串左右两侧的空格。

三、数学函数1. ABS():获取绝对值。

2. ROUND()、CEILING()、FLOOR():对数值进行四舍五入、向上取整、向下取整。

3. SIGN():获取数值的符号。

4. POWER()、SQRT()、EXP()、LOG():进行数值计算和运算。

四、聚合函数1. AVG()、SUM()、MIN()、MAX():对一组数据进行平均值、求和、最小值、最大值的计算。

2. COUNT():计算一组数据中元素的个数。

以上是SQL Server常用的系统函数,它们可以方便地进行数据处理和管理,提高开发效率和数据处理的准确性。

在实际应用中,可以根据具体的需求选择合适的函数,进行灵活的数据处理和操作。

SQL server2000的使用 查询


例:查询每个学院男生、女生发放奖学金的 总和。 SELECT 院系名称,性别,SUM(奖学金) AS ’学院_性别发放的奖学金总和‘ FRON 学生基本表 GROUP BY 院系名称,性别 ORDER BY 院系名称 4.平均值函数AVG() 返回指定表达式中所有值的平均值。
例:计算学生奖学金的平均值。 SELECT AVG(奖学金) AS ‘平均奖学金’ FROM 学生基本表 例:按性别计算学生的平均年龄。 SELECT 院系名称,AVG(YEAR (CURRENT_TIMESTAMP)-YEAR(出生 日期))AS ‘平均年龄’ FROM 学生基本表 GROUP BY 院系名称
例:查询年龄最大的学生的出生日期。 SELECT MIN(出生日期) AS ‘年龄最大学生 的出生日期’ FROM 学生基本表 例:查询每个学院中奖学金最少的学生学号 和姓名。 SELECT 院系名称,MIN(奖学金) AS ‘学院 最低奖学金’ FROM 学生基本表 GROUP BY 院系名称
3.求和函数SUM() 返回指定表达式中所有值之和。 例:查询学生所有奖学金的金额。 SELECT SUM(奖学金) AS ’奖学金总额‘ FROM 学生基本表 例:查询每个学院发放奖学金的总和。 SELECT 院系名称,SUM(奖学金) AS ’院系 奖学金总和‘ FROM 学生基本表 GROUP BY 院系名称
SELECT的基本使用
1.查询全部列信息 SELECT * FROM <表名> 例如:查看全部学生的基本信息. SELECT * FROM 学生基本表 2.查看部分列信息 例如:列出学校全部学生的姓名. SELECT 姓名 FROM 学生基本表
例如:查看所有学生的姓名、学号和性别信息 SELECT 姓名,学号,性别 FROM 学生基本表 3.去出相同结果行的DISTINCT 例如:查看学生都来自哪些省市. SELECT 籍贯 FROM 学生基本表 如果要去出相同的行则用DISTINCT. SELECT DISTINCT 籍贯 FROM 学生基本表 4.输出计算列和函数
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档