博客

  • 处理不规范数据,这招儿有点狠

    下面的这种表格形式,想必大家不会陌生吧:

    在这个表格内,同一个部门的人员名单都挤到一个单元格内。
    现在问题来了,要把这样的数据转换成数据列表,该怎么操作呢?

    在制作考勤、工资等表格时,都需要使用上面这种样式的表格才可以。
    实现这样的转换有多种技巧,下面咱们以Excel2016为例,说说具体的操作方法:

    步骤一
    单击数据区域任意单元格,再依次单击【数据】【从表格】。

    Excel自动打开【查询编辑器】界面。

    步骤二
    单击小组负责人所在列的列标,在【转换】选项卡下,依次单击【拆分列】【按分割符】。
    在拆分对话框中,分隔符选择自定义,输入、(顿号)。

    分列后的效果:

    步骤三
    按住Ctrl键不放,依次选中小组负责人的几个列,在【转换】选项卡中单击【逆透视列】

    转换后的效果:

    步骤四
    右键单击【属性】列的列标,删除。
    然后单击【开始】,【关闭并上载】

    这样就生成一个新的工作表,转置完成啦。

    本文转载来源 “ ExcelHome ”,转载请注明出处,感谢您的尊重!
  • VLOOKUP函数常用套路大全

    今天和大家来说说VLOOKUP的那些事儿,深入了解一下VLOOKUP函数的各种用法,看看这位大众情人还藏着多少不为人知的秘密。

    函数的语法为:
    VLOOKUP(要找谁,在哪儿找,返回第几列的内容,精确找还是近似找)

    第一参数是要在表格或区域的第一列中查询的值。
    第二参数是需要查询的单元格区域,这个区域中的首列必须要包含查询值,否则公式将返回错误值。如果查询区域中包含多个符合条件的查询值,VLOOKUP函数只能返回第一个查找到的结果。
    第三参数用于指定返回查询区域中第几列的值,该参数如果超出待查询区域的总列数,VLOOKUP函数将返回错误值#REF!,如果小于1返回错误值#VALUE!。
    第四参数决定函数的查找方式,如果为0或FASLE,用精确匹配方式,而且支持无序查找;如果为TRUE或被省略,则使用近似匹配方式,同时要求查询区域的首列按升序排序。

    1、常规查询
    如图,需要从B~E的数据表中,根据H3单元格的姓名查询对应的职务。
    公式为:
    =VLOOKUP(H3,C:E,3,0)

    提示:
    VLOOKUP函数第三参数中的列号,不能理解为工作表中实际的列号,而是指定要返回查询区域中第几列的值。

    2、带通配符的查询
    如图,需要从B~E的数据表中,根据H3单元格的姓氏,查询对应的姓名和部门。
    公式为:
    =VLOOKUP($H3&"*",$C:$E,COLUMN(A1),0)

    提示:
    通配符“*”表示任意多个字符,VLOOKUP函数第一参数使用$H3&"*",即在C列中查询以H2单元格内容开头的内容,并返回对应列的信息。

    3、近似查询
    如图,需要根据H~I的对照表,判断D列成绩对应的评议结果。
    公式为:
    =VLOOKUP(D2,H:I,2)

    提示:
    VLOOKUP函数第四参数被省略,在近似匹配模式下返回查询值的精确匹配值或近似匹配值。如果找不到精确匹配值,则返回小于查询值的最大值。
    使用近似匹配时,查询区域的首列必须按升序排序,否则无法得到正确的结果。

    4、逆向查询
    如图,需要从B~E的数据表中,根据H3单元格的部门,查询对应的姓名。
    公式为:
    =VLOOKUP(H3,CHOOSE({1,2},D2:D11,C2:C11),2,0)

    提示:
    VLOOKUP函数的查询值要求必须位于查询区域中的首列,如果被查找值不在数据表的首列时,需要先将目标数据进行特殊的转换。
    CHOOSE函数第一参数使用常量数组{1,2},将查询值所在的D2:D11和返回值所在的C2:C11整合成一个新的两列多行的内存数组。
    生成的内存数组符合VLOOKUP函数的查询值必须处于数据区域中首列的要求。VLOOKUP函数以职务做查询条件,在内存数组中查询并返回对应的姓名信息,从而实现了逆向查询的目的。

    5、多条件查询
    如图,需要从B~E的数据表中,根据H3单元格的部门和I3单元格的职务,查询对应的姓名。
    J3单元格公式为:
    =VLOOKUP(H3&I3,IF({1,0},D2:D11&E2:E11,C2:C11),2,)

    提示:
    使用连接符“&”将部门和职务合并成新的字符串,以此作为VLOOKUP函数的查询条件。
    IF部分,先将D列的部门和E列的职务进行连接,再使用IF({1,0}的方式,构造出部门职务在前、姓名在后的内存数组。
    VLOOKUP函数在IF函数构造出的内存数组首列中查询部门职务字符串的位置,返回对应的姓名。
    数组公式,不要忘了按<Ctrl+Shift+Enter>组合键。

    6、一对多查询
    如图,需要从B~E的数据表中,根据H3单元格的职务,查询对应的多个姓名。

    首先在A2单元格输入以下公式,向下复制:
    =(E2=$H$3)+A1

    然后在I3单元格输入以下公式,向下复制:
    =IFERROR(VLOOKUP(ROW(A1),A:C,3,0),"")

    提示:
    C列的职务每重复出现一次,A列的序号增加1。
    VLOOKUP函数使用1至N的递增序列作为查询值,使用A:C列作为查询区域,以精确匹配的方式返回与之相对应的B列的姓名。注意查找区域必须由辅助列A列开始。
    最后将辅助列字体设置为白色或进行隐藏即可。

    7、按指定次数重复数据
    如图,需要根据C列指定的次数,重复显示B列的内容。

    首先在A2单元格输入以下公式,向下复制:
    =A1+C2

    然后在E2单元格输入以下公式,向下复制:
    =IFERROR(VLOOKUP(ROW(A1),A:B,2,0),E3)&""

    本文转载来源 “ ExcelHome ”,转载请注明出处,感谢您的尊重!
  • Excel常用函数公式20例

    下面是一组常用Excel函数公式的用法,学会这些套路,让工作效率再高一丢丢。

    1、IF函数条件判断
    IF函数是最常用的判断类函数之一,能完成非此即彼的判断。
    如下图,考核得分的标准为9分,要判断B列的考核成绩是否合格。
    =IF(B4>=9,"合格","不合格")

    IF,相当于普通话的“如果”,常规用法是:
    IF(判断的条件,符合条件时的结果,不符合条件时的结果)

    2、多条件判断
    如下图所示,如果部门为生产、岗位为主操 有高温补助。在D列使用公式:
    =IF(AND(B2="生产",C2="主操"),"有","无")

    AND函数对两个条件判断,如果同时符合,IF函数返回“有”,否则为无。

    3、条件求和
    如下图所示,使用SUMIF函数计算一班的总成绩:
    =SUMIF(D2:D5,F2,C2:C5)

    SUMIF用法是:
    =SUMIF(条件区域,指定的求和条件,求和的区域)
    用通俗的话描述就是:
    如果D2:D5区域的班级等于F2单元格的“一班”,就对C2:C5单元格对应的区域求和。

    4、多条件求和
    如下图所示,要统计部门为生产,并且岗位为主操的补助总额。
    公式为:
    =SUMIFS(D2:D9,B2:B9,F2,C2:C9,G2)

    SUMIFS用法是:
    =SUMIFS(求和的区域,条件区域1,指定的求和条件1,条件区域2,指定的求和条件2,……)

    5、条件计数
    如下图,要统计指定店铺的业务笔数。也就是统计B列中有多少个指定的店铺名称。
    =COUNTIF(B2:B12,E3)

    COUNTIF函数统计条件区域中,符合指定条件的单元格个数。常规用法为:
    =COUNTIF(条件区域,指定条件)

    6、多条件计数
    要求:统计统计部门为生产,并且岗位为主操的人数
    公式为:
    =COUNTIFS(B2:B9,F2,C2:C9,G2)

    COUNTIFS函数统计条件区域中,符合多个指定条件的单元格个数。常规用法为:
    =COUNTIFS(条件区域1,指定条件1,条件区域2,指定条件2……)

    7、条件查找
    VLOOKUP函数一直是大众情人般的存在,函数的语法为:
    VLOOKUP(要找谁,在哪儿找,返回第几列的内容,精确找还是近似找)
    如下图,要查询F5单元格中的员工姓名是什么职务。
    =VLOOKUP($F$5,$B$1:$D$10,2,0)

    使用该函数时,需要注意以下几点:
    1、第4参数一般用0(或FASLE)以精确匹配方式进行查找。
    2、第3参数中的列号,不能理解为工作表中实际的列号,而是指定返回值在查找范围中的第几列。
    3、如果查找值与数据区域关键字的数据类型不一致,会返回错误值#N/A。
    4、查找值必须位于查询区域中的第一列。

    8、多条件查找
    如下图所示,要求查询部门为生产,并且岗位为部长的姓名。
    公式为:
    =LOOKUP(1,0/((B2:B9=F2)*(C2:C9=G2)),A2:A9)

    LOOKUP函数多条件查询写法为:
    =LOOKUP(1,0/((条件区域1=条件1)*(条件区域2=条件2)),查询区域)

    9、计算文本算式
    如下图,要计算单元格中的文本算式,先单击第一个要输入公式的单元格,定义名称 :
    计算 = EVALUATE(C2)
    然后在单元格中输入公式:
    =计算

    10、合并多个单元格内容
    要连接合并多个单元格中的内容,可以使用&符号完成。如下图,要合并A列的姓名和B列的电话号码,可以使用公式:
    =A2&B$1&B2

    11、合并带格式的单元格内容
    合并带有格式的内容时,Excel默认按常规格式进行合并,但是如果是日期、时间或是其他有格式的数值,结果就会让人大失所望了:

    如何才能正确连接出需要的字符串呢?其实很简单,C2公式为:
    =A2&TEXT(B2," y年m月d日")

    首先使用TEXT函数,把B列的日期变成具有特定样式的字符串,然后再与A列的姓名连接,就变成了最终需要的样式。

    12、比较大小写的单词是否相同
    如果在A1和A2单元格中分别输入大小写的单词,使用以下公式判断时,Excel会默认二者是相同的:
    =A2=B2

    如需区别大小写,可以使用公式:
    =EXACT(A2,B2)
    EXACT函数 区分大小写,但忽略格式上的差异。

    13、提取混合内容中的姓名
    如下图,要从A列姓名电话中提取出姓名,除了使用高版本的自动填充功能,还可以使用公式完成:
    =LEFT(A2,LENB(A2)-LEN(A2))

    LENB函数将每个汉字(双字节字符)的字符数按2计数,LEN函数则对所有的字符都按1计数。因此“LENB(A2)-LEN(A2)”返回的结果就是文本字符串中的汉字个数。
    LEFT函数从文本字符串的第一个字符开始,返回指定个数的字符,最终提取出员工姓名。

    14、根据身份证号码提取出生年月
    计算公式为:
    =1*TEXT(MID(B2,7,8),"0-00-00")

    首先使用MID函数从B2单元格的第7位开始,提取出表示出生年月的8个字符,结果为:
    "19780215"
    再使用TEXT函数将字符串转换为日期样式:
    "1978-02-15"
    然后通过*1计算,将其转换为真正的日期。最后设置为日期格式即可。

    15、替换部分电话号码
    如下图所示,要将手机号码的中间四位换成星号,公式为:
    =SUBSTITUTE(B2,MID(B2,4,4),"****",1)

    SUBSTITUTE函数的用法是:
    SUBSTITUTE(要替换的文本,旧文本,新文本,[替换第几个])
    先使用MID函数取得B列号码中的中间4位,再用“*****”替换掉这部分内容。
    最后一个参数使用1,表示只替换第一次出现的内容。比如第九行的电话号码是13801010101,最后四位和中间四位相同,如果不指定1,就会全部替换掉了。

    16、屏蔽函数公式返回的错误值
    在使用函数公式过程中,经常会返回一些诸如#N/A、#NAME?之类的错误值,要屏蔽这些错误值其实很简单,只需在原公式外侧加上一个IFERROR函数就好。
    IFERROR函数的用法为:
    =IFERROR(原公式,出现错误时要返回的内容)
    如果公式正确,就返回原有计算结果,如果公式返回的是错误值,就返回用户指定的显示内容。

    17、四舍五入函数
    ROUND函数这个想必大家经常用到吧,就是对数值按指定的位数四舍五入。比如:
    =ROUND(8/9,3)
    就是将8/9的计算结果四舍五入到三位小数,结果为0.889。

    18、取整的间隔小时数
    计算两个时间的间隔小时数,不足一小时部分舍去,计算加班时经常会用到,说多了都是泪……
    =TEXT(B2-B1,"[h]")

    19、提取日期时间中的日期值
    要从日期时间数据中提取出日期,可以使用以下公式:
    =INT(A2)
    要继续提取时间,只需要做个减法,就欧了:

    20、生成随机数
    RANDBETWEEN能够在指定范围内生成一组随机数据,对于广大质检、监理、统计人员来说,这的确是一个伟大的函数。
    函数的用法是:
    =RANDBETWEEN(数字下限,数字上限)
    比如以下公式,就是生成60到100之间的随机数:
    =RANDBETWEEN(60,100)

    本文转载来源 “ ExcelHome ”,转载请注明出处,感谢您的尊重!
  • 在Linux上进行源码编译安装程序详解

    一、编译安装概述

    前面两篇关于程序包管理器的文章谈到,无论是使用rpm命令还是yum命令安装的都是已编译好的程序包,在整个安装过程中用户只需执行一条命令即可完成安装。这样带来的好处是方便,但因为是安装的是已编译好的包,所以用户的系统平台环境必须与rpm包制作者的系统平台环境相同。此外,如果用户要安装使用某程序上的某个功能,而rpm包制作者在编译过程中默认没有指定该功能的实现,这时候该怎么办呢?更何况如果某程序只是提供源码而没有现成的rpm包。这时就需要用户手动编译安装了,而编译安装就是将程序源代码编译成完全适合自己平台类型的程序包。

    因此,用户首先得获得程序源码包(SRPM, Source RPM)。RPM包的命名格式为:name-VERSION-release.arch.rpm,而程序源码包(SRPM)的命名格式为:name-VERSION-release.src.rpm。可以发现,SRPM与RPM相比,将arch替换为src,说明SRPM包去掉了arch这一平台类型限制,因此经过用户自己编译安装可以编译成适合自己平台的程序包。

    以下为编译过程图解(以C源代码为例):

    我们知道,程序源代码一般为多文件组织格式,因此文件中的代码文件之间很有可能存在跨文件的依赖关系,这将给用户自行编译安装带来了极×××烦,因为对先编译哪些文件、后编译哪些文件根本无从知晓,因此这就需要项目管理器(或者项目构建器)了。C/C++的项目管理器为make,make工具可以在编译过程中指定使用哪个预处理器进行预处理、使用哪个编译器进行编译以及先编译什么程序文件、后编译什么程序文件,甚至完成更为复杂的操作等,能帮助用户快速地编译安装。make工具的执行依赖于makefile配置文档,因此make执行的所有操作皆由makefile指定。makefile可由执行configure脚本生成。而在执行configure脚本时,configure会结合用户通过命令行指定的选项以及各个Makefile.in模板文件来生成makefile文件。编译完成之后即可使用make install命令将编译好的程序包复制到用户指定的各个目录下。

    二、C代码编译安装三步骤

    (1) 执行configure脚本(# ./configure [option…])

    常用选项:

    –help:获得其支持使用的选项
    –prefix=/PATH/TO/SOMEWHERE:指定默认安装位置;默认为/usr/local/;
    –sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置;
    –enable-FEATURE[=ARG]:开启指定特性以及安装路径;默认开启时无须指定;
    –disable-FEATURE:关闭指定特性;默认关闭时无须指定;
    –with-PACKAGE[=ARG]:安装指定依赖包以及其安装路径;
    –without-PACKAGE:不安装指定依赖包;

    执行configure脚本的作用:

    ①用户可以通过选项传递参数给configure脚本,以指定启用的功能特性、安装路径等;而configure脚本在执行的过程中会参考用户的指定以及Makefile.in文件生成makefile文件;

    ②检查程序指定要启用的功能特性所依赖到的外部环境。

    (2) 执行make程序

    作用:

    make会执行真正的编译操作,但make本身并不是编译器,它只是一个项目构建工具,make程序会根据执行configure脚本所生成的makefile文件,并调用所需要用到的编译器来构建应用程序。

    (3) 执行make install安装操作

    作用:

    在前面的make程序执行之后,在当前目录下会创建出已编译完成的目标二进制格式的应用程序(包括二进制程序、库文件、配置文件及帮助文档等),而make install则会执行安装操作,即把当前目录下已编译好的程序包(二进制程序、库文件、配置文件及帮助文档等)复制到用户指定的各个目录下。

    注意:各个程序在编译安装过程中可能不尽相同,因此建议安装前查看INSTALL, README。

    三、编译安装后的配置

    (1) 导出目标二进制程序目录至PATH环境变量中

    方法:

    在生产环境中如果该二进制程序作为全局变量,可以在/etc/profile.d/目录下创建/etc/profile.d/NAME.d文件,其中'NAME'可定义设置名称。在该文件中写入下面一行:

    export PATH=PATH:/PATH/TO/BIN
    这里的/PATH/TO/BIN即为目标二进制程序所在目录。

    如果要想编译后的命令程序优先被查找到,可以添加在环境变量PATH的前面,如下:

    export PATH=/PATH/TO/BIN:PATH

    (2) 导出库文件路径

    方法:

    ①在/etc/ld.so.conf.d/目录下创建/etc/ld.so.conf.d/NAME.conf,其中NAME为自定义设置名称。而后,添加新的库文件所在目录至此文件中即可。

    ②做完这一步之后,需要让系统重新加载库文件(重新生成缓存):

    # ldconfig [-v]

    查看当前系统上已加载的库文件:

    # ldconfig -p

    (3) 导出头文件(位于include目录)

    程序编译安装完成之后,一般在安装路径中会有include目录,这个include目录就是头文件,头文件的功能是把外部文件的内容包含到源文件中,例如外部函数等。在程序开始编译之前,会执行一段预处理指令,而预处理指令则把头文件的内容包含到源文件中。

    如果要导出头文件,可基于软链接的方式来实现:

    # ln -sv 头文件目录 链接头文件目录(/usr/include/NAME)
    这里链接头文件目录一般为/usr/include/NAME,其中NAME可以是程序名,例如/usr/include/httpd。

    (4) 导出帮助手册

    方法:

    在CentOS 6上:

    编辑/etc/man.config文件,添加一个MANPATH:

    # MANPATH /PATH/TO/MAN
    这里'/PATH/TO/MAN'为目标程序的安装路径下的帮助手册目录。

    在CentOS 7上:

    编辑/etc/man_db.conf文件,添加一个MANPATH:

    # MANPATH_MAP /PATH/TO/BIN /PATH/TO/MAN
    这里/PATH/TO/BIN是目标二进制程序所在目录,/PATH/TO/MAN则是该程序的帮助手册所在目录。

  • php创建和调用webservice接口实例详解

    作为开发者来讲,要想写webservice接口或者调用别人的webservice接口,首先需要了解什么是webservice。简单说, WebService就是一些站点开放一些服务出来, 也可以是你自己开发的Service, 也就是一些方法, 通过URL,指定某一个方法名,发出请求,站点里的这个服务(方法),接到你的请求,根据传过来的参数,做一些处理,然后把处理后的结果以XML形式返回来给你,你的程序就解析这些XML数据,然后显示出来或做其它操作。

     

    写webservice需要了解:基础的 Web Services 平台是 XML + HTTP;另外Web services 平台的元素:SOAP (简易对象访问协议),UDDI (通用描述、发现及整合),WSDL (Web services 描述语言);任何webservice都包括客户端和服务端。下面以实例讲解如何用php写webservice接口让别人调用:

    首先需要建一个.wsdl文件,那么php如何建这个文件呢。有两种方式可以实现,一种是直接用zend studio工具生成;另一种就是php根据SoapDiscovery.class.php自动生成wsdl文件;具体哪一种根据自己情况选择,我一般用的是前者这样比较快速。下面写一下用类如何生成wsdl文件,首先需要上网上下载那个类文件,然后引入类文件后,看如下代码:
    creat_wsdl.php

    代码如下:

    1

    2

    3

    4

    5

    6

    <?php

    include_once('Service.php');

    include_once('SoapDiscovery.class.php');

    $wsdl=new SoapDiscovery('Service','soap');//第一参数为类名,也是生成wsdl的文件名Service.wsdl,第二个参数是服务的名字可以随便写

    $wsdl->getWSDL();

    ?>


    这样运行creat_wsdl.php文件就可以生成wsdl文件了。是不是很简单
    任何一个webservice都需要和一个实现类绑定的。也就是说别人调用的wsdl文件其实真正其作用的就是实现类中的方法;如下代码为服务端类文件
    Service.php

    代码如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    <?php

    class Service

    {

    public function Hello()

    {

    echo 'hello good';

    }

    public function Add($a,$b)

    {

    return $a+$b;

    }

    }

    $server=SoapServer('Service.php',array('soap_version'=>soap_1_2));

    $server->setClass('Service');//注册Service类的所有方法

    $server->handle();//处理请求

    ?>

    写好服务端和wsdl文件后那么就需要客户端调用了。请看客户端调用代码:

    client.php

    代码如下:

    1

    2

    3

    4

    5

    6

    <?php

    ini_set('soap.wsdl_cache_enabled','0');//关闭缓存

    $soap=new SoapClient('http://127.0.0.1/soap/Service.php?wsdl');

    echo $soap->Add(1,2);

    //echo $soap->_soapCall('Add',array(1,2))//或者这样调用也可以

    ?>

    这就是一个完整的写webservice接口和调用的实例代码,希望对需要的phper有所帮助;
    那么调用别人的webservice接口就是client.php所写的代码这样调用。

    本文原创发布php中文网 ,转载请注明出处,感谢您的尊重!
  • 和身份证有关的5个Excel函数公式

    以下是一组和身份证有关的函数公式,如果你是财务人员或是一名HR,那就一起来看一下啦:

    1、查找重复身份证号码:
    =IF(COUNTIF(A:A,A2&"*")>1,"重复","")

    要点:
    在COUNTIF函数的第二参数后加上一个星号 &"*"。
    COUNTIF函数在计算文本型数字时,会默认按数值型进行处理,但是Excel中的数字精度只有15位,并且身份证号码是18位,因此会把前15位相同的身份证全部识别为相同的内容。在第二参数后加上一个星号 &"*",就是告诉Excel,要查找包含A2单元格内容的文本,通过这样变通的手段,COUTNIF函数就听话啦。

    2、用出生年月来计算年龄:
    =DATEDIF(A4,TODAY(),"y")

    要点:
    DATEDIF函数用于计算两个日期之间的间隔。用法是:
    =DATEDIF(开始日期,结束日期,指定要返回的类型)
    第三参数是Y,表示年,是M,就表示月。
    TODAY函数返回系统当前的日期。
    DATEDIF函数是隐藏函数,输入时没有屏幕提示,需要手工录入哦。

    3、根据身份证号计算出生年月:
    =–TEXT(MID(A2,7,8),"0!/00!/00")

    要点:
    身份证号码中的第8位到15位是出生年月信息。
    首先使用MID函数从A2单元格的第7位开始,提取出8个字符,得到类似 19840727的结果。
    再使用TEXT函数将这个字符串变成日期样式的文本,得到类似1984/07/27的结果。
    由于TEXT函数的结果是文本型的内容,所以加上两个小减号 — 就是计算负数的负数,通过四则运算,变成真正的日期序列。
    公式也可以使用=–TEXT(MID(A2,7,8),"0-00-00"),原理是一样的。

    4、根据身份证号码提取性别:
    =IF(MOD(MID(A2,15,3),2),"男","女")

    要点:
    身份证号码中的第17位是性别信息,单数表示男,双数表示女。
    首先使用MID函数从A2单元格的第15位开始,提取出3个字符。
    再使用MOD函数计算这个字符与2相除的余数。
    最后使用IF函数判断,如果余数大于0,返回男,如果余数是0,则返回女。
    这里使用MID(A2,15,3),是为了兼容15位的旧身份证,这部分公式也可以使用MID(A2,17,1)。

    5、根据身份证号计算退休时间:
    =EDATE(TEXT(MID(A2,7,8),"0!/00!/00"),MOD(MID(A2,15,3),2)*120+600)

    要点:
    先用TEXT(MID(A2,7,8),"0!/00!/00"),计算出出生年月信息。
    再使用MOD(MID(A2,15,3),2)计算性别码和2相除的余数,结果是1或是0。
    如果性别码和2相除的余数是1,MOD(MID(A2,15,3),2)*120+600部分就相当于1*120+600,结果是720。
    否则就是0*120+600,结果是600。
    EDATE函数返回一个日期经过指定月份后的日期,也就是以出生年月为准,男性要经过720个月(60年),女性要经过600个月(50年)就是退休年龄了

    本文转载来源 “ ExcelHome ”,转载请注明出处,感谢您的尊重!
  • Excel多工作表快速汇总,简单才是硬道理

    今天和大家一起分享一篇多工作表合并汇总的技巧,教程所使用的Excel版本是Office 365。如果你是Excel 2016,不用担心,操作步骤完全一样。

    西门怡红超市,一个月每一天的销售报表存放在同一工作簿内:

    现在要汇总1个月的销售数据,也就是将1~31日的工作表全部进行汇总。
    效果如所示:

    步骤1   
    新建一个汇总工作簿,依次单击【数据】→【新建查询】→【从文件】→【从工作簿】:

    找到存放工作簿的地址,选中文件后点击【导入】:

    步骤2   
    在导航器中单击选中工作簿名称,点击【编辑】按钮:

    在查询编辑器窗口中,按住Ctrl键依次选中最右侧三列,单击鼠标右键→【删除列】:

    单击【Data】右下角的图标,展开数据:

    步骤3
    接下来对数据进行必要的整理:
    1、因为原表中有一个序号列,单击鼠标右键,把它删除:

    2、另外,原数据表中的首行是空行,第二行是数据表的名称,在汇总时是没有意义的,将其删除:
    点击【删除行】→【删除排在前列的行】,然后指定行数2,【确定】。

    3、右键单击最左侧的列标题→【重命名】,修改为“日期”。
        接下来把第一行用作标题:

    4、数据表中的空白行和字段标题也要去掉。
    点击【产品货号】的筛选按钮,在筛选列表中去掉null、空白以及字段标题的勾选,单击【确定】:

    依次点击【关闭并上载】→【仅创建连接】→【加载】:

    步骤4
    在【数据】选项卡下点击【现有连接】,打开刚刚创建的连接:

    在【导入数据】对话框中选择【数据透视表】:

    接下来根据需要调整透视表的布局,在【设计】选项卡下,报表布局选择为以表格形式显示,将分类汇总设置为无汇总。

    步骤5
    在【分析】选项卡下插入切片器:

    单击切片器中的日期,就可以看到对应的汇总结果:

    如果数据源发生变化,只要右键刷新 即可得到最新的结果。

    使用power query可以汇总多个工作表、汇总多个工作簿或是汇总多个工作簿下的多个工作表,这些内容以后咱们都会讲到哦。

    本教程示例文件下载:
    https://pan.baidu.com/s/1skIkuU5

    如果你使用的是Excel 2013,可以在此下载安装power query 插件:
    https://www.microsoft.com/zh-CN/download/details.aspx?id=39379
    其他Excel版本暂无法使用该功能哦

    本文转载来源 “ ExcelHome ”,转载请注明出处,感谢您的尊重!
  • SQL Server CONVERT() 函数

    定义和用法

    CONVERT() 函数是把日期转换为新数据类型的通用函数。

    CONVERT() 函数可以用不同的格式显示日期/时间数据。

    语法

    CONVERT(data_type(length),data_to_be_converted,style)

    data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。

    可以使用的 style 值:

    Style ID Style 格式
    100 或者 0 mon dd yyyy hh:miAM (或者 PM)
    101 mm/dd/yy
    102 yy.mm.dd
    103 dd/mm/yy
    104 dd.mm.yy
    105 dd-mm-yy
    106 dd mon yy
    107 Mon dd, yy
    108 hh:mm:ss
    109 或者 9 mon dd yyyy hh:mi:ss:mmmAM(或者 PM)
    110 mm-dd-yy
    111 yy/mm/dd
    112 yymmdd
    113 或者 13 dd mon yyyy hh:mm:ss:mmm(24h)
    114 hh:mi:ss:mmm(24h)
    120 或者 20 yyyy-mm-dd hh:mi:ss(24h)
    121 或者 21 yyyy-mm-dd hh:mi:ss.mmm(24h)
    126 yyyy-mm-ddThh:mm:ss.mmm(没有空格)
    130 dd mon yyyy hh:mi:ss:mmmAM
    131 dd/mm/yy hh:mi:ss:mmmAM

    实例

    下面的脚本使用 CONVERT() 函数来显示不同的格式。我们将使用 GETDATE() 函数来获得当前的日期/时间:

    CONVERT(VARCHAR(19),GETDATE())
    CONVERT(VARCHAR(10),GETDATE(),110) 
    CONVERT(VARCHAR(11),GETDATE(),106)
    CONVERT(VARCHAR(24),GETDATE(),113)
    

    结果类似:

    Dec 29 2008 11:45 PM
    12-29-2008
    29 Dec 08
    29 Dec 2008 16:25:46.635
    本文原创发布W3School ,转载请注明出处,感谢您的尊重!
  • SQL Server DATEDIFF() 函数

    定义和用法

    DATEDIFF() 函数返回两个日期之间的时间。

    语法

    DATEDIFF(datepart,startdate,enddate)

    startdate 和 enddate 参数是合法的日期表达式。

    datepart 参数可以是下列的值:

    datepart 缩写
    yy, yyyy
    季度 qq, q
    mm, m
    年中的日 dy, y
    dd, d
    wk, ww
    星期 dw, w
    小时 hh
    分钟 mi, n
    ss, s
    毫秒 ms
    微妙 mcs
    纳秒 ns

    实例

    例子 1

    使用如下 SELECT 语句:

    SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate

    结果:

    DiffDate
    1

    例子 2

    使用如下 SELECT 语句:

    SELECT DATEDIFF(day,'2008-12-30','2008-12-29') AS DiffDate

    结果:

    DiffDate
    -1
    本文原创发布W3School ,转载请注明出处,感谢您的尊重!
  • SQL Server DATEADD() 函数

    定义和用法

    DATEADD() 函数在日期中添加或减去指定的时间间隔。

    语法

    DATEADD(datepart,number,date)

    date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。

    datepart 参数可以是下列的值:

    datepart 缩写
    yy, yyyy
    季度 qq, q
    mm, m
    年中的日 dy, y
    dd, d
    wk, ww
    星期 dw, w
    小时 hh
    分钟 mi, n
    ss, s
    毫秒 ms
    微妙 mcs
    纳秒 ns

    实例

    假设我们有下面这个 "Orders" 表:

    OrderId ProductName OrderDate
    1 'Computer' 2008-12-29 16:25:46.635

    现在,我们希望向 "OrderDate" 添加 2 天,这样就可以找到付款日期。

    我们使用如下 SELECT 语句:

    SELECT OrderId,DATEADD(day,2,OrderDate) AS OrderPayDate
    FROM Orders
    

    结果:

    OrderId OrderPayDate
    1 2008-12-31 16:25:46.635
    本文原创发布W3School ,转载请注明出处,感谢您的尊重!