多条件函数筛选日期区间函数,这里日期不对数据表进行改动让约等于日进行统计

  银团贷款又称为辛迪加贷款以共同出资、共同承担风险为特征的银行联合信贷经营形式,在国家投资信用中得到广泛的应用银团贷款的当事人为借款人和参加银團的各家银行,后者又可以分为牵头行代理行和参与行。银团贷款不仅分散了贷款风险而且又为企业筹集巨额资金开辟了渠道现在已經成为国际上中长期贷款的主要形式之一。

  什么是远期利率协议

  远期利率协议是一种远期合约,买卖双方商定将来一定时间段嘚协议利率并指定一种参照利率。在将来清算日按照规定的期限和本金数额由一方向另一方支付协议利率和届时参照利率之间差额利息的贴现金额。

  贷款承诺是指银行承诺在一定时期内或者某一时间按照约定条件提供贷款给借款人的协议它属于银行的表外业务,昰一种承诺在未来某时刻进行的直接信贷它可以分为不可撤消贷款承诺和可撤消贷款承诺两种。对于在规定的借款额度内客户未使用的蔀分客户必须支付一定的承诺费。

  银行承兑汇票的程序是什么

  承兑是指汇票付款人承诺在汇票到期日支付汇票金额的票据行為。在通常情况下承兑涉及三方当事人,即汇票的出票人票上所载付款人,持票人银行承兑汇票的程序如下:首先持票人在汇票到期日前或者出票日起一个月内向付款人提示承兑。其次银行收到持票人提示承兑的汇票后就应当向持票人签发收到汇票的回单,并且在彡日之内决定承兑或者拒绝承兑最次付款人承兑汇票后,履行到期付款的义务

  本票、汇票、支票、银行承兑汇票的定义是什么?

  本票是指由出票人签发的承诺自己在见票时无条件支付确定的金额给收款人或者持票人的票据。本票的出票人可以是银行也可以昰企业,可以分为银行本票和商业本票两种目前在我国使用的是银行本票。本票可以背书转让

  汇票是指由出票人签发的,委托付款人见票时或者在指定日期无条件支付确定的金额给收款人或者出票人的票据汇票按照出票人的不同可以分为银行汇票和商业汇票两种,汇票也可以背书转让

  支票是指由出票人签发的,委托办理支票存款业务的银行或者其他金融机构在见票时无条件支付确定的金额給收款人或者持票人的票据支票共有四种:转帐支票,现金支票普通支票,划线支票

  银行承兑汇票是指由收款人或者付款人开絀的,由付款人向其开户银行提出承兑申请而且经过银行承诺到期兑付的汇票

  什么是系统性风险和非系统性风险?

  系统性风险昰指由那些能够影响整个金融市场的风险因素引起的这些因素包括经济周期、国家宏观经济政策的变动等。这种风险不能通过分散投资楿互抵消或者削弱因此又称为不可分散风险。而非系统性风险是一种与特定公司或者行业相关的风险它与经济、政治和其他影响所有金融变量的因素无关。通过分散投资非系统性风险可以被降低,而且如果分散是充分有效的这种风险还可以被消除。因此又被称为可汾散风险

  什么是票据贴现,如何计算贴现额

  票据贴现是指银行应客户的要求,买进其未到付款日期的票据并向客户收取一萣的利息的业务。具体程序是银行根据票面金额以及既定贴现率计算出从贴现日到票据到期日这段时间的贴现利息,并从票面金额中扣除余额部分支付给客户。票据到期时银行持票据向票据载明的支付人索取票面金额的款项。

  贴现额的计算公式为:

  贴现付款額=票据面额×(1-年贴现率×未到期天数÷360天)

  贴现业务形式上是票据的买卖但实际上是信用业务,即银行通过贴现间接贷款给票据金额的支付人

  什么是备用信用证?它有哪些特点

  备用信用证实质上是担保的一个类别,通常与商业票据的发行相联系備用信用证是一种信用证或者类似安排,构成开证行对受益人的下列担保:

  一是偿还债务人的借款或者预支给债务人的款项

  二昰支付由债务人所承担的负债,

  三是对债务人不履行契约而付款

  由此可见,银行开出备用信用证等的行为与传统的商业信用证鈈同点在于它并不需要银行进行实际的融资,仅当申请人无力偿还时才需要银行承担债务责任

  什么是票据的背书?

  票据的背書是指票据持有人将票据转让他人时在票据背面或者粘单上记载有关事项并且签章的票据行为。签章的人称为背书人接受票据转让的囚称为被背书人或者转让人。背书可以分为记名背书和不记名背书两种经过票据的背书,如果出票人或者付款人到期拒绝支付票据不能兑现时,背书人负有连带的付款责任因此,票据的背书是背书人的一种或有负债

  什么是同业拆借市场?该市场的交易主要有哪些

  同业拆借市场,是指金融机构之间以货币借贷方式进行短期资金融通活动的市场同业拆借的资金主要用于弥补银行短期资金的鈈足,票据清算的差额以及解决临时性资金短缺需要

  同业拆借市场的主要交易有:(1)头寸拆借,一般为日拆(2)同业借贷,它的期限比较长从数天到一年不等。同业拆借市场的利率确定方式有两种:其一为融资双方根据资金供求关系以及其他影响因素自主决定;其②为融资双方借助中介人经纪商通过市场公开竞标确定。

  什么是国家助学贷款

  国家助学贷款是由中央和省级政府共同推动的┅种信用贷款,由国家指定的商业银行负责发放对象是在校的全日制高校中经济确实困难的本、专科学生和研究生。其主要优惠政策在於:一是无需担保二是由中央或省级财政贴息一半。

  贷款金额主要根据公式确定:学生贷款金额=所在学校收取的学费+所在城市规定嘚基本生活费-个人可得收入(包括家庭提供的收入、社会等其他方面资助的收入)一般情况下,学生通过申请国家助学贷款每年可得箌人民币8000元左右的贷款。国家助学贷款的期限一般不超过8年贷款利率按中国人民银行规定的同期限贷款利率执行,不准上浮

  什么叫国内生产总值?

Product)是指一个国家或地区使用本国或本地区的生产要素,在一年内创造的最终产品和最终服务的货币价值总额国内生產总值增长率常常被用来描述一个国家或地区的经济增长情况。但是国内生产总值的概念具有一定的局限性。它不能反映国民经济增长嘚结构和质量片面追求GDP的高速度,容易导致经济出现高投入、高消耗、低效益、不可持续的粗放型增长模式

  什么是绿色GDP?

  人类嘚经济活动包括两方面的活动。一方面在为社会创造着财富即所谓“正面效应”,但另一方面又在以种种形式和手段对社会生产力的发展起着阻碍作用即所谓“负面效应”。这种负面效应集中表现在两个方面其一是无休止地向生态环境索取资源,使生态资源从绝对量仩逐年减少;其二是人类通过各种生产活动向生态环境排泄废弃物或砍伐资源使生态环境从质量上日益恶化现行的国民经济核算制度只反映了经济活动的正面效应,而没有反映负面效应的影响因此是不完整的,是有局限性的是不符合可持续发展战略的。

  改革现行嘚国民经济核算体系对环境资源进行核算,从现行GDP中扣除环境资源成本和对环境资源的保护服务费用其计算结果可称之为“绿色GDP”。綠色GDP这个指标实质上代表了国民经济增长的净正效应。绿色GDP占GDP的比重越高表明国民经济增长的正面效应越高,负面效应越低反之亦嘫。

  我国国内生产总值核算采用什么方法资料来自何处?数据是如何形成和发布的

  我国国内生产总值基本上是按国际通行的核算原则,对各种类型资料来源进行加工计算得出的主要资料来源包括三部分:第一部分是统计资料,包括国家统计局系统的统计资料如农业、工业、建筑业、批发零售贸易餐饮业、固定资产投资、劳动报酬、价格、住户收支统计资料,国务院有关部门的统计资料如茭通运输、货物和服务进出口、国际收支统计资料;第二部分是行政管理资料,包括财政决算资料、工商管理资料等;第三部分是会计决算资料包括银行、、航空运输、铁路运输、邮电通信系统的会计决算资料等。统计资料在越来越多的领域采用抽样调查方法和为避免中間层次干扰的超级汇总法基本计算方法采用国际通用的现价和不变价计算方法。

  人们会发现不同时期发布的同一年国内生产总值數据往往不一样,这是因为国内生产总值核算数据有个不断向客观性、准确性调整的过程首先是初步估计过程。某年的国内生产总值先是在次年的年初,依据统计快报进行初步估计

  统计快报比较及时,但范围不全准确性不很强。初步估计数一般于次年2月份发表茬《中国统计公报》上其次是在次年第二季度,利用统计年报数据对国内生产总值数据重新进行核实年报比快报统计范围全,准确度吔高采用这类资料计算得到的国内生产总值数据是初步核实数,一般在第二年的《中国统计年鉴》上公布至此,工作还未结束因为國内生产总值核算除了大量统计资料外,还要用诸如财政决算资料、会计决算资料等大量其他资料这些资料一般来得比较晚,大约在第②年10月左右得到所以在第二年年底的时候,根据这些资料再做一次核实叫最终核实。

  最终核实数在隔一年的《中国统计年鉴》上發布三次数据发布后,如果发现新的更准确的资料来源或者基本概念、计算方法发生变化,为了保持历史数据的准确性和可比性还需要对历史数据进行调整。我国在1995年利用第一次第三产业普查资料对国内生产总值历史数据进行过一次重大调整

  外汇管制是指一国政府利用各种法令和规定,对居民外汇买卖的数量和价格加以严格的行政控制以达到平衡国际收支、维持利率,以及集中外汇资金并根據政策需要加以分配的目的

  “洗钱”是指犯罪分子将贪污、贩毒、走私、黑社会性质的有组织犯罪、恐怖活动及其他犯罪的违法所嘚及其产生的收益,利用金融系统掩盖、隐瞒这些违法所得的来源、性质和所有权使其在形式上合法化的行为。

  现今“洗钱”活動也逐步与上游犯罪相分离,利用计算机等高新技术利用金融专业服务,借用空壳公司伪造商业票据,使用衍生金融产品与金融产品紧密结合,发展成为独立的犯罪行为特别是在当前经济、资本流动国际化的情况下,日益猖獗的“洗钱”活动越来越具有跨国性质對金融安全、经济安全和国家安全都构成了严重威胁,因此必须要加强国际协作

  什么是金融衍生产品?

  金融衍生产品也称金融衍生工具,是一种通过预测股价、利率、汇率等未来市场行情走势以支付少量签订远期合同或互换不同金融商品的派生交易合约。、期权、远期合约、掉期合约等均属此列通过这些基本形式的组合,就形成了复杂的金融衍生工具

  什么是国际储备和国际清偿力?

  國际储备是指一国货币当局持有的可用于弥补国际收支赤字,维持本国货币汇率稳定的国际间可以接受的一切资产

  国际清偿力的概念比国际储备的概念广一些,是指一个国家为本国国际收支赤字融通资金的能力它不仅包括货币当局持有的各种国际储备,而且包括該国从国际金融机构或国际资本市场融通资金的能力、该国商业银行所持有的外汇、其他国家希望持有这个国家资产的愿望以及该国提高利率时可以引起资金流入的程度等

  什么是动产质押和权利质押?

  动产质押是指借款人或者第三人将其动产移交银行占有,将该动產作为银行债权的担保动产质押有如下特征:(1)动产质权是一种担保物权,即质押权的设定须以有效的债权债务的设定为前提主債权消失,质权即不存在(2)质物只能是动产,并且是可转移占有权的特定的动产具有流通性和可转移性。动产质权人必须占有质粅质权人与出质人不能约定由出质人代为占有质物。

  权利质押与动产质押的根本区别在于前者以债权、股权和知识产权中的财产權利为标的物,而后者以有形动产为标的物如果说动产质权是一种纯粹的物权,权利质权严格来说是一种准物权共性在于二者都是质押的表现形式,具有质押的一般特征

  按照我国《担保法》规定,能作为权利质押标的物的权利只限于除财产所有权之外的具有可转讓性的特定财产权至于人身权(如姓名权、肖像权、名誉权、荣誉权、婚姻自由等)和专属权(如专利发明者的身份权、作者的署名权)均不得成为权利质押的标的物。我国《担保法》还明确规定不动产的所有权不能成为权利质押的标的。

  反担保即担保的担保它昰指第三人为借款人向银行提供担保时,借款人应第三人的要求为第三人所提供的担保如银行对借款人发放保证贷款时,保证人因要承擔风险故要求借款人为自己再提供担保,借款人为保证人所提供的担保即属反担保担保旨在保障债权的实现,是对银行利益的保护洏反担保则是对担保人利益的保护,旨在保护担保人不受损失

  借款人为第三人提供的担保形式,既可以是保证也可以是抵押、质押。因此借款人为第三人提供担保的内容和程序均适用我国《担保法》关于担保的规定。

  担保实践证明反担保的做法能够促使第彡人放心大胆地担任借款人的保证人,或者拿出自己的财产为银行设定抵押权和质权这不仅有利于保障第三人的利益,也有利于担保银荇利益的实现

  派生存款指商业银行通过发放贷款、购买有价证券等方式创造的存款。商业银行吸收到原始存款后只按规定将一部汾现金作为应付提款的准备,其余部分可以用于发放贷款和投资在广泛使用非现金结算的条件下,取得银行贷款或投资款项的客户并不(或不全部)支取现金而将其转入自己的银行账户,这就在原始存款的基础上形成一笔新存款,接受这笔存款的银行除保留一部分作為外其余部分又用于发放贷款或投资,从而又形成了派生存款以此类推,便使原始存款得到数倍的扩张

  货币乘数是基础货币与貨币供应量扩张关系的数量表现,即中央银行创造或缩减一单位的基础货币能使货币供应量增加或减少的倍数。货币供应量是由基础货幣与货币乘数共同决定的令M表示货币供给量,B表示基础货币k表示货币乘数,则货币供给的基本模型为:M=B×k

  并表监管是指监管当局以整个银行集团为对象,对银行集团的总体经营和所有风险进行监督这里的银行集团既包括银行直接的分支机构和子公司,也包括集團内的非银行机构和金融附属公司资本监管、防止资本的重复计算是并表监管的重要核心内容之一。

  巴塞尔银行监管委员会对监管當局的并表监管提出了以下原则:

  1.监管当局应了解银行集团的整体结构和主要业务;

  2.监管当局应确保银行集团总部全面监测、有效控制其境内外分支机构和附属机构的各项业务监督整个集团内部的风险管理和内部控制情况,定期获取并核实所有境内外业务的信息;

  3.监管当局有权全面审查银行从事的各项银行和非务无论是银行直接从事的业务(包括海外机构的业务),还是通过附属机构间接從事的业务;

  4.监管当局的监管框架能够评估一家商业银行或银行集团从事的非银行业务给这家银行或银行集团带来的风险;

  5.监管當局有权要求银行集团在并表基础上达到审慎监管标准包括资本充足率、风险集中等标准,并确定哪些标准适用于单个银行哪些适用於并表的银行,哪些对两者均适用;

  6.监管当局能够收集各个银行集团的并表财务信息;

  7.监管当局有权对银行集团的境外机构进行現场检查;

  8.监管当局有权要求银行集团的母公司和附属机构采取纠正措施必要时限制或界定银行集团整体的业务范围和开展这些业務的海外场所等。

  什么是银行业金融机构监管评级体系

  银行业金融机构监管评级体系是指银行业监管机构根据现场检查、非现場监管和其他渠道获得的银行业金融机构的信息,对该机构的资本充足水平、资产质量、经营管理状况、盈利能力、流动性及市场风险敏感性等方面进行客观定量分析及定性判断在此基础上对该机构的经营管理和风险状况进行全面评估的方法和过程。目前许多国家的银荇监管当局都采用了的CAMELS评级体系。中国银监会参照CAMELS评级体系及其他评级体系开发出了针对有关被监管机构的评级体系。

  什么是银行業跨境监管

  在银行业国际化的背景下,各国的银行监管当局都要负责对本国银行的境外分支机构和境内外资银行实施监管即在某些情况下担当母国监管者的角色,在另外情况下担当东道国监管者的角色而且,任何一个跨国银行的分支机构都要同时接受母国和东道國监管当局的监管实施跨境监管的目的是要确保所有的跨境银行业务都能得到母国和东道国的有效监管。为此母国监管当局应当实施铨球并表监管,对银行在世界各地的业务特别是其外国分行、附属机构的各项业务,进行充分有效的监管;同时东道国监管当局也应對境内的外国银行机构实施有效监管。母国与东道国监管当局应当建立监管合作机制及时通报和交流有关信息。

  所谓互换(Swap)是指當事双方同意在预先约定的时间内通过一个中间机构来交换一连串付款义务的金融交易。

Swap)在货币互换交易中,两个独立的借取不同貨币信贷的借款人同意在未来的时间内,按照约定的规则互相负责对方到期应付的借款本金和利息。通过这种交换借款的双方都可鉯既借到自己所需的货币贷款,又同时避免了还款付息时货币兑换引起的汇率风险从而使双方或者至少其中一方获益。在利率互换交易Φ两个单独的借款人从两个不同的贷款机构借取了同等数额、同样期限的贷款,双方商定互相为对方支付贷款利息此外,还可以将货幣互换和利率互换结合起来进行比如一种货币的固定利率付息与另一种货币的浮动利率付息相交换,这也称为交叉利率通货互换(Cross

  什么是金融租赁和回租租赁?

  金融租赁是指由承租人选定所需设备后由租赁公司(出租人)负责购置,然后交付承租人使用承租人按租约定期交纳租金。金融租赁合同通常规定任何一方不能中途毁约租赁期满后,租赁设备可以由承租人选择退租、续租或将产权转移給承租人金融租赁方式大多用于大型成套设备的租赁。

  回租租赁也称售出租赁,企业把持有的设备出售给租赁公司同时签订租約,租回原设备使用这是由于设备所有者既想获得周转资金另行投资,又想继续使用原有设备而采用的特殊的租赁方式。

  LIBOR(London InterbankOffered Rate )即伦敦同业拆借利率,是指伦敦的第一流银行之间短期资金借贷的利率是国际金融市场中大多数浮动利率的基础利率。作为银行从市场仩筹集资金进行转贷的融资成本贷款协议中议定的LIBOR通常是由几家指定的参考银行,在规定的时间(一般是伦敦时间上午11:00)报价的平均利率最经常使用的是3个月和6个月的LIBOR。

  我国对外筹资成本即是在LIBOR利率的基础上加一定百分点从LIBOR变化出来的,还有同业拆放利率(SIBOR)、纽约同业拆放利率(NIBOR)、香港同业拆放利率(HIBOR)等

  独立董事是指具有完全意志,能代表公司的全体股东和公司整体利益的董事会荿员他独立于公司的管理和经营活动,以及那些有可能影响他们做出独立判断的事物不能与公司有任何影响其客观、独立判断的关系。它不代表出资人、管理层、股东大会、董事会任何一方的利益因此会顾全大局,从企业自身出发对公司活动进行监督,改变一切公司事务均由董事会决策的局面并将最终给所有股东带来利益。从世界范围看独立董事制度主要盛行于英、美这些不设监事会的国家,其监督用意非常明显

Investors)即合格的境外机构投资者制度,是指允许合格的境外机构投资者在一定的规定和限制下,汇入一定额度的外汇资金并转换为当地货币,通过被严格监管的专门账户投资当地证券市场其资本利得、股息等经批准后可转为外汇汇出的一种市场开放模式。QFII作为一种过渡性制度安排是那些货币没有自由兑换、资本项目未完全开放的的国家和地区,实现有序、稳妥开放证券市场的特殊渠噵

  2002年11月5日,中国证监会颁布了《合格境外机构投资者境内证券投资管理暂行办法》,标志着我国正式实行QFII制度.

  QDII(国内机构投资者赴海外投资资格认定制度QUALIFIEDDOMESTIC INSTITUTIONAL INVESTORS, QDII)制度由香港政府部门最早提出,是在外汇管制下内地资本市场对外开放的权宜之计以容许在资本账项目未完全開放的情况下,国内投资者往海外资本市场进行投资

  汇金公司是个什么样的机构?

  成立于2003年12月16日,注册资本3724.65亿元人民币的中央汇金投资有限责任公司是国务院批准设立的国有独资投资控股公司,主要职能是代表国家行使对(,)、中国(,)等重点金融企业的出资人的权利和義务支持中国银行、中国建设银行落实各项改革措施,完善公司治理结构保证国家注资的安全并获得合理的投资回报。它是独立于现囿国有资产管理体系和银行监管体系的投资控股实体

  如何理解流动性比率?

  流动性比率是最常用的财务指标它用于测量企业償还短期债务的能力。流动性比率=流动资产/流动负债其计算数据来自于资产负债表。一般说来流动性比率越高,企业偿还短期债务嘚能力越强一般情况下,营业周期、流动资产中应收账款数额和存货的周转速度是影响流动性比率的主要因素

  计算出来的流动性仳率,只有和同行业平均流动性比率、本企业历史的流动性比率进行比较才能知道这个比率是高还是低。一般认为生产企业合理的最低流动比率是2。这是因为流动资产中变现能力最差的存货金额约占流动资产总额的一半剩下的流动性较强的流动资产至少要等于流动负債,企业的短期偿债能力才会有保证

  期权,是指在未来某时期行使合同按协议价格买卖某种金融工具的权利。期权有买权(也称看涨期权)和卖权(也称看跌期权)之分买权是指在约定的未来时间内按协定价格购买若干标准单位金融工具的权利,卖权是指在约定嘚未来时间内按协定价格出售若干标准单位金融工具的权利无论是买权还是卖权,都有合同的买方(也称合同持有人)和卖方(也称合同讓与人),期权合同的买方是从卖方购进一种承诺表明卖方将在约定的时期内随时准备依买方的要求按协定价格买进(或卖出)标准数量的金融工具。期权合同的买方为取得这一承诺要付出一定的代价即期权的价格。但是合同的买方除了付出期权价格以外只享受购买戓出售金融工具的权利,而不负其他义务即不是合同到期时非买或非卖不可。

  为什么目前除商业银行外其他投资人不能投资于次级債券

  由于商业银行经营管理的高度专业性,就目前我国商业银行公开信息披露的程度来说一般的非银行机构投资人和公众投资人難以识别、分析、量化商业银行的风险及其变化情况,只有本业中的专业机构(如银行)方可进行这种风险投资这也是循序渐进、保护廣大投资人的正确措施。待信息披露和透明度建设达到监管者较为满意的程度时次级债务将向更大范围的投资人开放。

  海外其他银荇监管当局如何处理商业银行持有的其他银行资本工具中国银监会规定的处理方法是否符合国际惯例?

  从监管实践来看各国对商業银行持有其他银行资本工具的处理方法也不尽相同。规定银行持有其他信贷机构和金融企业发行的资本工具必须全部从该银行资本中扣除,但少量用于交易目的(treading purpose)的持有除外新加坡、要求从资本中直接扣除持有的其他银行发行的资本工具。在香港对经金管局(HKMA)同意的持有其他银行发行的资本工具可不进行扣除欧盟监管条例规定一家商业银行持有其他银行发行的资本工具最高不能超过该银行资本嘚10%。银监会规定商业银行持有其他银行发行的次级债券合计不得超过核心资本的20%是国际上普遍认可的处理方法,同时还规定在计算资本充足率时给予其100%的风险权重(不享有银行同业债权20%的风险权重)符合审慎监管的要求。目前银监会没有发现银行间通过“协议”的方式相互持有彼此发行的次级债券,如果发生这种情况银监会也将采取从资本中扣除的处理方法。

  银行间相互持有次级债券是否应当茬计算资本充足率时予以扣除

  在1988年的资本协议中,巴塞尔委员会明确表示对商业银行持有其他商业银行发行的资本工具,可以不從资本中扣除因为这样做可能无助于一些国家银行体系的结构调整。委员会提出是否从银行资本中扣除该银行持有的其他银行发行的资夲工具(包括股票、可转债、次级债券)由各国银行监管当局自定,但同时规定如果人为地为提高资本充足率而相互交叉持有资本工具,则应采取从资本中扣除的处理方式

  次级债券是指固定期限不低于5年(包括5年),除非银行倒闭或清算,不用于弥补银行日常经营损失,且該项债务的索偿权排在存款和其它负债之后的商业银行长期债券。次级债计入资本的条件:不得由银行或第三方提供担保;并且不得超过商業银行核心资本的50%

  次级债券作为资本有哪些局限性?

  目前商业银行次级债券的发行量已达到723亿元,对提高国有商业银行特別是股份制商业银行的资本充足率,发挥了较大的作用

  但是,银监会对次级债券的一些特性也有充分的认识次级债券所筹集的资金不能用于弥补银行日常经营中出现的损失,只有当银行破产清算时方可用来弥补存款人和其他债权人可能蒙受的损失。正是考虑到这┅点在《商业银行次级债券发行管理办法》中,我们明确规定商业银行投资其它商业银行发行的次级债务工具合计不得超过核心资本的20%

  本文首发于微信公众号:中国投行俱乐部。文章内容属作者个人观点不代表和讯网立场。投资者据此操作风险请自担。

(责任編辑:邱光龙 HF056)

一旦成功地从表中检索出数据僦需要进一步操纵这些数据,以获得有用或有意义的结果这些要求包括:执行计算与数学运算、转换数据、解析数值、组合值和聚合一個范围内的值等。

下表给出了T-SQL函数的类别和描述

执行的操作是将多个值合并为一个值。例如 COUNTSUMMIN MAX

是一种标量函数,可返回有关配置設置的信息

将值从一种数据类型转换为另一种。

支持加密、解密、数字签名和数字签名验证

返回有关游标状态的信息。

可以更改日期囷时间的值

执行三角、几何和其他数字运算。

返回数据库和数据库对象的属性信息

是一种非确定性函数,可以返回分区中每一行的排洺值

返回可在 Transact-SQL 语句中表引用所在位置使用的行集。

返回有关用户和角色的信息

对系统级的各种选项和对象进行操作或报告。

函数的目標是返回一个值大多数函数都返回一个标量值(scalar value),标量值代表一个数据单元或一个简单值实际上,函数可以返回任何数据类型包括表、游标等可返回完整的多行结果集的类型。本章不准备讨论到这个深度第12章将讲解如何创建和使用用户自定义函数,以返回更复杂的数據

函数己经存在很长时间了,它的历史比SQL还要长在几乎所有的编程语言中,函数调用的方式都是相同的:

T-SQL中一般用SELECT语句来返回值。如果需要从查询中返回一个值就可以把SELECT当成输出运算符,而不用使用等号:

对于SQL函数而言参数表示输入变量或者值的占位符。函数鈳以有任意个参数有些参数是必须的,而有些参数是可选的可选参数通常被置于以逗号隔开的参数表的末尾,以便于在函数调用中去除不需要的参数

SQL Server在线图书或者在线帮助系统中,函数的可选参数用方括号表示在下列的CONVERT()函数例子中,数据类型的lengthstyle参数是可选的:

可將它简化为如下形式因为现在不讨论如何使用数据类型:

根据上面的定义,CONVERT()函数可接受2个或3个参数因此,下列两个例子都是正确的:

這个函数的第一个参数是数据类型Varchar(20)2个参数是另一个函数GETDATE()GETDATE()函数用datetime数据类型将返回当前的系统日期和时间第2条语句中的第3个参数决定叻日期的样式。这个例子中的101指以mm/dd/yyyy格式返回日期本章后面将详细介绍GETDATE()函数。即使函数不带参数或者不需要参数调用这个函数时也需要寫上一对括号,例如GETDATE()函数注意在书中使用函数名引用函数时,一定要包含括号因为这是一种标准形式。

由于数据库引擎的内部工作机淛SQL Server必须根据所谓的确定性,将函数分成两个不同的组这不是一种新时代的信仰,只和能否根据其输入参数或执行对函数输出结果进行預测有关如果函数的输出只与输入参数的值相关,而与其他外部因素无关这个函数就是确定性函数。如果函数的输出基于环境条件戓者产生随机或者依赖结果的算法,这个函数就是非确定性的例如,GETDATE()函数是非确定性函数因为它不会两次返回相同的值。为什么要把看起来简单的事弄得如此复杂呢主要原因是非确定性函数与全局变量不能在一些数据库编程对象中使用(如用户自定义函数)。部分原因是SQL Server緩存与预编译可执行对象的方式例如,即席查询可以使用任何函数不过如果打算构建先进的、可重用的编程对象,理解这种区别很重偠

以下这些函数是确定性的:

以下这些函数与变量是非确定性的:

变量既可用于输入,也可用于输出在T-SQL中,用户变量以@符号开头用於声明为特定的数据类型。可以使用SET或者SELECT语句给变量赋值以下的例子用于将一个int类型的变量@MyNumber传递给SQRT()函数:

结果是12,即144的平方根

以下例孓使用另一个int型的变量@MyResult,来捕获该函数的返回值这个技术类似于过程式编程语言中的函数调用样式,即把SET语句和一个表达式结合起来給参数赋值:

使用SELECT的另一种形式也可以获得同样的结果。对变量要在赋值前要先声明使用SELECT语句来替代SET命令的主要优点是,可以在一个操莋内同时给多个变量赋值执行下面的SELECT语句,通过SELECT语句赋值的变量就可以用于任何操作了

 上面的例子首先声明了4个变量,然后用两个SELECT语呴给这些变量赋值而不是用4SELECT语句给变量赋值。虽然这些技术在功能上是相同的但是在服务器的资源耗费上,用一个SELECT语句给多个变量賦值一般比用多个SET命令的效率要高将一个甚至多个值选进参数的限制是,对变量的赋值不能和数据检索操作同时进行这就是上面的例孓使用SELECT语句来填充变量,而用另外一个SELECT语句来检索变量中数据的原因例如,下面的脚本就不能工作:

 这个脚本会产生如下错误:

消息141级别15,状态12

向变量赋值的SELECT 语句不能与数据检索操作结合使用。

函数经常和查询表达式结合使用来修改列值这只需将列名作为参数传递給函数即可,随后函数将引用插入到SELECT查询的列的列表中如下所示:

在这个例子中,BirthDate列的值被作为参数传递给YEAR()函数函数的结果是别名为BirthYear嘚列。

我们需要的功能常常不能仅由一个函数来实现根据设计,函数应尽量简单用于提供特定的功能。如果一个函数要执行许多不同嘚操作就变得复杂和难以使用。因此每个函数通常仅执行一个操作,要实现所有的功能可以将一个函数的返回值传递给另一个函数,这称为嵌套函数调用

以下是一个简单的例子:GETDATE()函数的作用是返回当前的日期与时间,但不能返回经过格式化的数据因为这是CONVERT()函数的功能。要想同时使用这两个函数可以把GETDATE()函数的输出作为CONVERT()函数的输入参数。

报表的典型用途是从全部数据中提取出代表一种趋势的值或者彙总值这就是聚合的意义。聚合函数回答数据使用者的如下问题:

上个月鸡雏的总销售量是多少?

1924岁之间的巴西男性在食品调味品上的平均支出是多少?

上季度所有订单中从订购到运输的最长时间是多少?

收发室里仍在工作的最老的员工是谁?

聚合函数应用特定的聚合操作并返回┅个标量值(单一值)返回的数据类型对应于该列或者传递到函数中的值。聚合经常和分组、累积以及透视等表运算一起使用生成数据分析结果。第7章将详细介绍这个主题这里仅讨论简单SELECT查询中的一些常用函数。

聚合函数不仅可用在SELECT查询中还可以和标量输入值一起使用。那么这样做的意义是什么呢?在下列代码中将值15传递给下列聚合函数,每个函数的返回值都相同:

它们都返回15虽然,对同一个值求平均、求和、求最小值、求最大值所得的结果还是那个值。如果对一个值计数又会产生什么结果呢?

得到的值是1因为函数只计数叻一个值。

现在做一些有意义的事聚合函数只有在处理结果集合中的一组数据时才有意义。每个函数都处理某列的非空值除非使用分組操作(详见第7),否则不能在同一个SELECT语句中既返回聚合的值又返回常规的列值。

AVG()函数用于返回一组数值中所有非空数值的平均值例如,表6-2包含了体操成绩

对这些数据执行以下查询:

如果有三个女孩没有完成一些项目,在表中没有记录成绩则可用NULL来表示(见表6-3)

在这种情況下计算平均值时只考虑实际的数值,NULL不参与运算结果是8.921429 但是如果把缺少的成绩也算在内,即用数值0代替NULL则会严重影响最终成績(6.245),她们能不能进入国家级的比赛就难说了

COUNT()函数用于返回一个列内所有非空值的个数,这是一个整型值比如,在上一个例子中体操數据被保存在#GymEvent表中,要确定Sammi参加的项目数则可以执行下列查询:

结果是1,因为Sammi只参加了跳马比赛她的平衡木成绩是NULL

如果需要确定表Φ的行数无论这些行是不是NULL值,都可以使用以下语法:

由于COUNT(*)函数会忽略NULL值所以这个查询的结果是2

MIN()函数用于返回一个列范围内的最小非空值;MAX()函数用于返回最大值这两个函数可以用于大多数的数据类型,返回的值根据对不同数据类型的排序规则而定为了说明这两个函数,假设有一个表包含了两列值一列是整型值,另一列是字符型值如表6-4所示。

如果分别调用MIN()MAX()函数将会返回什么值呢

因为VarCharColumn中值的存储类型为字符类型,而不是数字所以结果以每个字符的ASCII值为顺序从左到右排序。这就是12比其他值小、而4比其他值大的原因

SUM()函数是最瑺用的聚合函数之一,它的功能很容易理解:和AVG()函数一样它用于数值数据类型,返回一个列范围内所有非空值的总和

配置变量不是函數,不过它们的用法和系统函数相同每个全局变量都能够返回SQL Server执行环境的标量信息。以下是一些常见的例子

这个变量包含当前连接发苼的最后一次错误的代码。在执行的语句没有错误时@@ERROR变量的值是0。出现标准错误时错误是由数据库引擎引发的。所有的标准错误代码與消息都保存在sys.messages系统视图中可以使用如下脚本查询:

定制错误可以通过调用RAISERROR语句来手动引发,并调用sp_addmessage系统存储过程将其添加到sysmessages表中

以丅是一个@@ERROR变量的简单例子。先试着将一个数除以0数据库引擎会引发标准错误号为8134的错误。注意查看Results选项卡中的查询结果在发生错误时,Management

 在成功检索@@ERROR的值后@@ERROR的值将返回0,因为@@ERROR只保存了上次执行的语句的错误代码如果希望检索更多的错误信息,可以使用如下脚本从sysmessages视图Φ得到:

 本节的后面部分内容将说明如何通过使用错误函数来更高效地返回错误数据

除了美国英语之外,SQL Server还默认安装了其他语言每种語言专用的错误消息都有一个语言标识符(mslangid),对应于syslanguages表中的一种语言如下图所示。

0 除算エラーが発生しました

0?? ??? ??? ??????.

属性名mslangid被非正式地定义为Microsoft Global Language Identifier。微软公司用这个标识符来标识一种语言或语言和国家的组合微软公司把语言和国家的组合定义为地区。例如在随SQL Server安装的英语中,美国英语的mslangid1033英国英语的mslangid2057。要检索出所有已安装的、支持的语言可以执行下面的查询: 

Server的指定实例有唯一的服务名。例如在名为WoodVista的计算机上有两个SQL

这个变量用于记录从打开当前连接开始发生的总错误次数和@@ERROR变量一样,它对每个用户会话昰唯一的并将在连接关闭时被重置。

这个变量记录从打开当前连接时开始计算的磁盘读取总数DBA使用这个变量查看磁盘读取活动的情况。

这个变量包含当前SQL Server实例的完整版本信息

比如,对于运行在Windows 7上的SQL Server 2008开发版实例以上脚本能够返回如下信息:

实际的版本号是一个简单的整型值,它在微软公司内部使用而发行的产品可能有其他的商标名。在本例中SQL Server 2005的版本是9SQL Server 2008的版本是10Windows XP Professional显示为Windows NT 5.l版,而Vista显示为6.0版构建号用於内部控制,反映beta版和预览版以及正式发行后的补丁包的变化

前面学习了如何使用@@ERROR全局变量来检索错误信息。而返回所有错误数据的更恏方法是使用错误函数这些函数返回的信息可以存储在错误跟踪表中,以供错误审核错误函数嵌套在错误处理例程中。第11章将详细讨論错误处理其实通过使用嵌套在TRYEND TRY语句中的代码块,后跟一个放在CATCHEND CATCH语句中的代码块就可以实现错误处理

所谓的错误捕获,其实就是這个意思如果运行上面的示例,将不会出现可识别的错误因为错误将被捕获并在CATCH语句块中进行处理。在编写错误处理代码时SQL程序员必须把这些代码放在会引发系统错误的catch代码块中。

下列几个错误函数用于返回错误的特定信息:

返回错误的严重级别错误的严重级别是┅个从025的整数。

返回错误的状态号错误状态是一个整数,可以唯一地表示系统错误的原因

返回例程中导致出错的行号。

返回发生错誤的存储过程名或触发器名

下表简要描述了严重级别。

信息性消息不会引发系统错误

用户可以更正的错误,例如违反了外键或主键规則

非致命的、不重要的资源错误

致命的、不重要的资源错误

所有进程中的致命数据库错误

致命的数据库完整性错误

下面脚本使用T-SQL的内置错誤处理功能来捕获和输出遇到除0错误时返回的错误数据。SELECT命令的结果将显示在Management Studio的消息选项卡中

可以看出,执行这个脚本会在消息选项鉲中返回有关错误的更多详细信息而不仅仅是错误号本身。

数据类型转换可以通过CAST()CONVERT()函数来实现大多数情况下,这两个函数是重叠的它们反映了SQL语言的演化历史。这两个函数的功能相似不过它们的语法不同。虽然并非所有类型的值都能转变为其他数据类型但总的來说,任何可以转换的值都可以用简单的函数实现转换

CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型以下例孓用于将文本字符串'123'转换为整型:

返回值是整型值123。如果试图将一个代表小数的字符串转换为整型值又会出现什么情况呢?

CAST()函数和CONVERT()函数都鈈能执行四舍五入或截断操作由于123.4不能用int数据类型来表示,所以对这个函数调用将产生一个错误:

要返回一个合法的数值就必须使用能處理这个值的数据类型。对于这个例子存在多个可用的数据类型。如果通过CAST()函数将这个值转换为decimal类型需要首先定义decimal值的精度与小数位數。在本例中精度与小数位数分别为92。精度是总的数字位数包括小数点左边和右边位数的总和。而小数位数是小数点右边的位数這表示本例能够支持的最大的整数值是9999999,而最小的小数是0.01

decimal数据类型在结果网格中将显示有效小数位:123.40

精度和小数位数的默认值分别是180。洳果在decimal类型中不提供这两个值SQL Server将截断数字的小数部分,而不会产生错误

结果是一个整数值:123

在表的数据中转换数据类型是很简单的。丅面的例子使用Product表首先执行如下查询:

假定产品经理已经创建了一个系统,用于唯一地标识生产出来的每辆自行车以便跟踪其型号、類型和类别。他决定合并产品号、产品生产线标识符、产品型号标识符和一个顺序号为生产出来的每辆自行车创建一个唯一的序列号。茬这个过程的第一步他要求提供包括除顺序号之外的所有属性的所有可能产品的根标识符。

如果使用下面的表达式就不能得到希望的結果,如图6-2所示

消息245,级别16状态1,第1

我们没有得到希望的结果而得到了有点奇怪的错误消息:请把nvarchar值转换为int。因为之前我们没有偠求进行任何转换所以这个错误很奇怪。这个查询的问题在于我们试图利用第一个连接符来连接字符值ProductNumber利用第二个连接符连接另一个芓符值ProductLine,最后连接的是ProductModelID字符值(它是一个整数)

查询引擎会把连接符当成一个数学运算符,而不是一个字符不管结果是什么,都需要更正這个表达式以确保使用正确的数据类型。以下表达式执行了必要的类型转换返回如图6-3所示的结果:

如果把整型值转换为字符类型就不會增加多余的空格了。查询引擎将把这些值用加号和连接符组合在一起进行字符串连接运算,而不是和前面的数值进行加法或者减法运算了

对于简单类型转换,CONVERT()函数和CAST()函数的功能相同只是语法不同。CAST()函数一般更容易使用其功能也更简单。CONVERT()函数的优点是可以格式化日期和数值它需要两个参数:第1个是目标数据类型,第2个是源数据以下的两个例子和上一节的例子类似:

CONVERT()函数还具有一些改进的功能,咜可以返回经过格式化的字符串值且可以把日期值格式化成很多形式。有28种预定义的符合各种国际和特殊要求的日期与时间输出格式丅表列出了这些日期格式。

使用科威特算法来支持阿拉伯样式的日期格式

欧洲默认设置 + 毫秒

ODBC 规范(带毫秒)

2049,将两位数的年份 50 解释为 1950許多客户端应用程序(如基于自动化对象的应用程序)都使用截止年份 2030 年。SQL Server 提供了两位数年份截止配置选项可通过此选项更改 SQL Server 使用嘚截止年份,从而对日期进行一致处理建议您指定四位数年份。

smalldatetime 数据类型时未指定的时间成分设置为 00:00:00.000,未指定的日期成分设置为

smalldatetime 轉换为字符数据时,包含秒或毫秒的样式将在这些位置上显示零使用相应的 char varchar 数据类型长度从 datetime smalldatetime 值转换时,可截断不需要的日期部分

從样式包含时间的字符数据转换为 datetimeoffset 时,将在结果末尾追加时区偏移量

这个函数的第三个参数是可选的,该参数用于接收格式代码整型值表中的例子用于对DateTime数据类型进行转换。在转换SmallDateTime数据类型时格式不变,但一些元素会显示为0因为该数据类型不支持毫秒。以下的脚本唎子将输出格式化的日期:

格式代码012也可用于数字类型,它们对小数与千位分隔符格式产生影响而不同的数据类型所受的影响是不┅样的。一般来说使用格式代码0(或者不指定这个参数的值),将返回该数据类型最惯用的格式使用1或者2通常显示更为详细或者更精确的徝。以下例子使用格式代码0

使用值1则返回如下结果:

使用值2则返回如下结果:

以下例子和上例相同但是使用Float类型:

使用值0不会改变所提供的格式,但是使用值12将返回以科学计数法表示的数字后者使用了15位小数:

这是一个将数字转换为字符串的快捷函数。这个函数有3个参数:数值、总长度和小数位数如果数字的整数位数和小数位数(要加上小数点占用的一个字符)的总和小于总长度,对结果中左边的字符将用涳格填充在下面第1个例子中,包括小数点在内一共是5个字符结果显示在网格中,显然左边的空格被填充了这个调用指定,总长度为8個字符小数位为4位:

结果值的右边以0填充:123.4000

下面给函数传递了一个10字符的值并指定结果包含8个字符,有4个小数位:

只有将这个结果截断才能符合要求STR()函数对最后一位进行四舍五入:123.4568。现在如果为函数传递数字1,并指定结果包含6个字符有4个小数位,STR()函数将用0补足祐边的空位:

然而如果指定的总长度大于整数位数、小数点和小数位数之和,结果值的左边将用空格补齐:

游标可以处理多行数据在過程循环中一次访问一行。和基于集合的高效操作相比这个功能对系统资源的消耗更大。可以用一个函数和两个全局变量来管理游标操莋

这个函数返回一个整型值,表示传递给这个函数的游标类型变量的状态有很多不同类型的游标会影响这个函数的操作。为简单起见下表列出了这个函数的常见返回值。

游标包含一行或多行(动态游标包含0行或者多行)

这个变量是一个整型值表示在当前连接中打开的游標中的行数。根据游标类型这个值也能不代表结果集中的实际行数。

这个变量是一个标记用于表示当前游标指针的状态。这个变量主偠用来判断某行是否存在以及在执行了FETCH NEXT语句后,是否已执行到结果集的尾部打开游标时,@@FETCH_STATUS变量值为-1一旦把第一个值放在游标中,@@FETCH_STATUS变量值就变成0当不再把更多的行放在游标中时,该变量的值将变回-1

这些函数可以操作DateTimeSmallDateTime类型的值。有些函数可用于解析日期值的日期与時间部分有些函数可用于比较、操纵日期/时间值。日期数据类型的区别如下表所示

DATEADD()函数用于在日期/时间值上加上日期单位间隔。比如要得到2007429日起90天后的日期,可以使用下列语句:

可以把下表的值作为时间间隔参数传递给DATEADD()函数

在下面列出的例子中,我们使用和上┅个例子一样的日期并且在这些例子中还包含了时间数据。每个操作的结果将显示在查询的下一行中

可以将CONVERT()函数和DATEADD()函数组合在一起,來对1989989个月前的日期值进行格式化

这将返回一个可变长度的字符值,比前面例子结果中的默认日期更易容易理解这是一个函数嵌套调用,DATEADD()函数的返回值(一个DateTime类型的值)被作为值参数传递给CONVERT()函数

DATEADD()DATEDIFF()函数可以看作一对表兄弟,有点像乘法与除法在等式的两端有4个元素:起始日期、时间间隔(datepart)、差值和最终日期。如果已知其中的三个值就可以求出第4个值。如果在DATEADD()函数中使用起始日期、一个整型值和一个時间间隔就可返回与起始日期相关的最终日期值。如果提供了起始日期、时间间隔和最终日期DATEDIFF()函数就可以返回差值。

为了说明这一点我们选择任意两个日期与一个时间间隔作为参数。这个函数将以所提供的时间间隔为单位返回两个日期之间的差值要知道198998日和19911017日之间差了几个月,可编写如下查询代码:

结果是25个月如果以日期为单位呢?

199672日和199784日之间差几个星期?

57星期。甚至可以算出自己嘚年龄是多少秒:

结果显示有些人已经活了15亿秒了!

可以将列名作为参数把这个函数用在查询中。首先建立一个简单的表其中包含一些囚的姓名和生日:

初看起来结果是对的,但存在的问题是年龄值没有精确到日比如,根据表中的数据Nancy的生日是1221日,他今年将庆祝第32個生日(这个查询在20108月运行)如果依据上述计算结果来确定他的年龄何时变化,就应在一月份的某天给他发生日卡片这比实际日期提前叻11个月。

除非用更小的时间单位来计算这些日期的差否则结果只在雇员实际生日的一年以内是精确的。以下例子将用差值除以一年(包括閏年)的天数并将结果值转换为int类型,进行取整运算而不是四舍五入。

比较这次的结果和上一个例子的结果看看有什么不同。

可以看箌Nancy31岁,其他雇员的年龄也精确到了天表中的BirthDate列存储雇员的生日,并以午夜(00:00:00AM)为界这是一天中的第一秒。GETDATE()函数返回当前的时间与日期当前两个日期相差约8小时(写这段文字时是上午8)。如果希望这个计算更精确就需要在当前日期的午夜把GETDATE()函数的结果转换为datetime类型。

这两個函数用于返回datetime或者shortdatetime值的日期部分DATEPART()函数返回一个整型值;DATENAME()函数返回一个包含描述性文字的字符串。比如将日期4-29-1988传递给DATEPART()函数,如指定返囙月份值则返回数字4

而使用相同的参数,DATENAME()函数返回04(这取决于你的机器的本地语言如果是英文版,那么将返回April):

这两个函数都接收和DATEADD()函数一样的时间间隔参数常量

这两个函数都用于返回datetime类型的当前日期与时间。GETUTCDATE()函数使用服务器上的时区设置来求出UTC时间这和格林威治标准时间或飞行员所说的"祖鲁时"(Zulu Time)是一样的。两个函数都能精确到3.33毫秒

执行这两个函数,都将返回未经格式化的结果见下图:

我在丠京,和UTC时间相差8个小时和标准时间相差9个小时。可以使用如下DATEDIFF()函数来验证这个时间差值:

2008新的datetime2数据类型的结果该数据类型可以精确箌100纳秒,当然这取决于服务器安装的硬件

这三个函数分别返回以整数表示的datetime或者smalldatetime类型值的日、月、年。它们的用途很广泛如可以创建獨特的个性化日期格式。假设需要创建一个自定义的日期值作为字符串通过将这三个函数的输出结果转换成字符类型,然后进行连接操莋就可以对输出结果以任何形式进行组合了:

这个脚本生成下列结果:

下一节将讨论字符串操纵函数,并使用相似的技术来构建一个紧湊的定制时间戳

字符串函数可以解析、替换、操纵字符型值。在处理原始字符数据时最大的挑战之一是如何可靠地提取出有意义的信息。有很多字符串解析函数可用于标识和解析子字符串(一个大字符型值的一部分)我们一直在做这种事,在我们阅读文件、发票或者书面材料时就会本能地标识、分离出有意义的信息片段。这个过程的自动化非常困难即使是处理不太复杂的文本,也很困难这些函数包含几乎所有必需的工具,而挑战在于如何找出最简单、最高效的方法

这四个函数是相似的,它们都可以在字符和字符的标准数字表示之間转换美国标准信息交换码(American Standard Code for Information InterchangeASCII)标准字符集包含128个字母、数字和标点符号这个字符集是IBM PC体系结构的基础,虽然有些字符现在看来已经很古老了但还是被保留了下来,且仍是现代计算机技术的核心如果在计算机上使用英语,则键盘上的每个字符都是用ASCII码表示的这对说渶语(至少以英语打字)的计算机用户来说是有利的,但是其他人又该怎么办呢?

在计算机的发展过程中 ASCII字符集发布没多长时间便过时了。人們很快将它扩展成为256个字符的ANSI字符集一个字符用一个字节来保存。这个扩展的字符列表满足了许多其他用户的需求可以支持主要的欧洲语言字符,不过仍是美国标准(由美国国家标准学会持有)仍建立在最初的英语字符集的基础上。为了支持所有可印刷的语言人们制订叻Unicode标准,它支持多种语言特定的字符集每个Unicode字符需要2个字节的存储空间,是ASCIIANSI字符的两倍但是使用2个字就可以表示超过65 000个不同的字符,完全能够支持东欧和亚洲字符SQL Server同时支持ASCIIUnicode两种标准。

ASCII()CHAR()是两个基于ASCII的函数这两个函数可将计算机上应用的每个字符表示为数字。要確定代表一个字符的数字是什么就应给ASCII()函数传送只包含一个字符的字符串,如下:

如要将一个已知数字转换为字符又该怎么办?使用CHAR()函数即可:

要得到完整的ASCII字符值列表可以对一个临时表填充从0127的数字,然后调用CHAR()函数返回相应的字符为了节省空间,我们对以下这個脚本进行了删节但包含整个结果集,并以多栏格式给出

6-12是以多栏网格重新格式化的结果集。需要注意的是这里将不可印刷的控制芓符以方括号表示由于许多因素限制,如所安装的字体或语言不同下表的显示可能会有稍许差异。

要返回扩展字符编码集中的字符鈳以将字符编码传递给NCHAR()函数:

返回带重音符号的小写e:é。

返回西班牙语的"enya",或者带有发音符号的n

当然,ASCII标准也支持所有的欧洲字符所以使用CHAR()函数也可以返回这些扩展字符。如果对256~65536之间的值使用CHAR()函数返回值就很有趣了。例如下面的查询返回希腊字符Ω:

下面的查詢返回西里尔字母Ya(Я)

CHARINDEX()是原始的SQL函数用于寻找在一个字符串中某子字符串第一次出现的位置。如函数名所示这个函数返回一个整型值,表示某子字符串的第一个字符在整个字符串中的位置索引以下脚本用于在字符串Washington中寻找子字符串sh的出现位置:

返回的结果是3,表明s是字苻串Washington中的第3个字符这说明CHARINDEX函数匹配字符的索引是从1开始的。如果没有匹配到任何结果函数将返回0。在这个例子中使用两个字符作为子芓符串并没有特别意义但是如果字符串包含多个s字符,就有意义了

PATINDEX()函数和CHARINDEXO函数类似,它执行相同的操作但方法稍许不同,该函数增加了对通配符(Like运算符中使用的字符)的支持顾名思义,它将返回一个字符模式的索引这个函数也可以和ntextnchar(max)nvarchar(max)等大字符类型一起使用。紸意如果和这些大字符类型一起使用,PATINDEX()函数将返回bigint类型的值而不是int类型的值。以下是一个例子:

注意如果想找到一个字符串,在所仳较的字符串的前后各有0个或者多个字符则两个百分符都是必须的。下划线表明这个位置上的字符不必匹配它可以是任意字符。

和使鼡相同字符串的CHARINDEX()函数作一下比较:

这两个函数都返回索引值16请注意这些函数的执行过程。下一节将把这两个函数和SUBSTRING()函数组合在一起演礻如何使用界定符解析字符串。

LEN()函数用于返回一个代表字符串长度的整型值这是一个简单、有用的函数,经常与其他函数一起使用来應用业务规则。以下例子将月份和日期转换为字符类型然后测试它们的长度。如果月份日期只有一个字符就填充字符0,然后组合成一個8字符的美国格式的日期字符串(MMDDYYYY)

这个脚本将返回代表日期的8个字符:

LEFT()RIGHT()函数是相似的,它们都返回一定长度的子字符串这两个函数的区別是,它们返回的分别是字符串的不同部分LEFT()函数返回字符串最左边的字符,顺序从左数到右RIGHT()函数正好相反,它从最右边的字符开始鉯从右到左的顺序返回特定数量的字符。看一看使用这两个函数返回"GeorgeWashington"这个字符串的子字符串的例子

如果使用LEFT()函数返回一个5字符的子字符串,则函数先定位最左边的字符向右数5个字符,然后返回这个子字符串如下所示。

如果使用RIGHT()函数返回一个5字符的子字符串则函数先萣位最右边的字符,向左数5个字符然后返回这个子字符串,如下所示

要想返回字符串中有意义的部分,这两个函数都不是特别有用洳果想返回全名中的姓氏或者名字,该怎么办这需要多做一点工作。如果能确定每个姓名中空格的位置就可以使用LEFT()函数在全名中读取洺字。在这种情况下可以使用CHARINDEX()或者PATINDEX()函数来定位空格,然后使用LEFT()函数返回空格前的字符下面是第一个用过程方法编写的例子,它将处理過程分解成以下步骤:

如果不想在结果中包含空格就需要从@SpaceIndex值中减去1,这样结果中就只有名字了

SUBSTRING()函数能够从字符串的一个位置开始,往右数若干字符返回一个特定长度的子字符串。和LEFT()函数不同之处是该函数可以指定从哪个位置开始计数,这样就可以在字符串的任何位置摘取子字符串了这个函数需要三个参数:要解析的字符串、起始位置索引、要返回的子字符串长度。如果要返回到所输入字符串尾蔀的所有字符可以使用比所需长度更大的长度值。SUBSTRING()函数将返回最大可能长度的字符数而不会将多出的长度以空格填充。

只要指定字符串最左边的字符(1)为起始索引就可以用SUBSTRING()函数替代LEFT()函数。

继续上一节的例子可以设置起始位置与长度,返回姓名字符串中间的值在这个唎子中,从位置4开始返回一个6字符的子字符串"rge Wa"

现在将上述各函数组合在一起即可从名字+空格+姓氏格式的全名字符串中解析出名字和姓氏。使用先前的逻辑通过函数嵌套来减少脚本的行数,并去掉@SpaceIndex变量下面用SUBSTRING()函数替代LEFT()函数:

 类似的逻辑可以用于解析姓氏,但是必须將起始位置更改为空格后的那个字符如果空格在第7个位置上,那么姓氏将从第8个位置开始这就意味着起始位置是CHARINDEX()的返回结果加上1

把仩述步骤组合在一起就可以运行下面的查询,从全名变量中提取出名字和姓氏:

传递给SUBSTRING()函数的值是空格所在位置加上1并将该值作为起始位置,这将是姓氏的第1个字母由于不可能总是知道名字的长度,所以将LEN()函数的结果作为子字符串长度参数传递进来当SUBSTRING()函数到达这个位置时,就到达了字符串的末尾这样就可以将字符串中从空格后面开始的所有字符都包含进来了。

为了举例方便先创建并填充一个临時表:

下面执行一个使用函数调用来解析名字和姓氏值的单行查询表达式。这里对@FullName变量的引用被表中的FullName列所替代:

 在下图所示的结果中显示叻两个不同的列,分别是名字和姓氏

这两个函数很容易理解,它们用于将字符串中所有字符分别都转换为小写和大写这在比较用户输叺或者存储用于比较的字符串时是非常有用的。字符串比较通常是区分大小写的这取决于SQL Server安装时的设置。如果和其他的字符串操纵函数┅起使用就可以将字符串转换为合适的大小写,以便存储或显示以下例子说明混合大小写的名字,假设名字中的第2个大写子字符串前呮包含一个空格但在特殊情况下也有一些名字是没有空格的。这个例子很容易通过扩展来处理包含其他类型的混合大小写名字(如以MC开头嘚名字带连接号的名字等)

 这个脚本将返回MC Donald还可以对这个例子进行扩展,以处理姓氏包含撇号的情况在这个例子的业务规则中,空格是不考虑的如果找到了撇号,就将后面的字符全部转为大写请注意如果要在脚本中测试撇号,就必须输入两次撇号(' ')以表明这是一個文字,而不是一对单引号姓氏中只存储一个撇号。

这两个函数分别返回将字符串的左边和右边的空白修剪掉之后的字符串:

REPLACE()函数可以把芓符串中的某个字符或某个子字符串替换为另一个字符或者子字符串该函数可以用于全局查找和替换工具中。

在需要将一些字符重复填充进一个字符串时这两个函数是非常有用的。这里也使用SUBSTRING()例子中的临时表为每个名字填满20个字符然后将20减去各个字符串的长度,以便將正确的值传递给REPLICATE()函数:

 结果是每个名字后面都填满了星号各个名字的总长度都是20个字符:

SPACE()函数与上述函数类似,区别在于该函数使用空格進行填充它返回一个由空格组成的字符串,空格的个数由参数定义

顾名思义,这个函数用于将字符串中的字符颠倒过来这在处理连接列表中的单个字符值时将会被用到。

这个函数可将字符串中的一部分替换为另一个字符串它本质上是将一个字符串以特定的长度插入叧一个字符串中的特定位置上。这对于源值与目的值的长度不一样的字符串替换是很有用的下列代码用于将字符串中的价格替换为109.95:

价格徝是从第32个字符开始的,有5个字符长在这个位置上插入的子字符串有多长并不重要,只需要知道需要删除多少个字符就可以了

这个函數和SQL Server对象名组合使用,以将结果传递给表达式它只用于给输入的字符串加一对方括号,并返回新形成的字符串如果参数包含保留的分隔符或者封装字符(比如引号或括号),这个函数将修改字符串以便SQL Server能将结果字符串中的这类字符当成文本字符。如下面的例子所示查询嘚结果如图6-10所示。

下表中列出的函数用于执行多种普通与特殊的数学运算可以执行代数、三角、统计、估算与财政运算等运算。

计算一個角的反余弦值以弧度表示

计算一个角的反正弦值,以弧度表示

计算一个角的反正切值以弧度表示

计算两个值的反正切,以弧度表示

返回大于或等于一个数的最小整数

计算一个角的正弦值以弧度表示

计算一个角的余切值,以弧度表示

将一个角从弧度转换为角度

返回小於或等于一个数的最大整数

计算以2为底的自然对数

计算以10为底的自然对数

返回以浮点数表示的圆周率

将一个角从角度转换为弧度

返回以随機数算法算出的一个小数

可以接收一个可选的种子值

对一个小数进行四舍五入运算,

根据参数是正还是负返回–1或者1

计算一个角的正弦值,以弧度表示

计算一个角正切的值以弧度表示

这是一些工具函数,它们返回SQL Server配置细节、服务器与数据库设置细节的信息包括一组鼡于返回不同对象的属性状态的通用以及专用函数,这些函数把对Master数据库中系统表以及用户数据库的查询封装在函数中建议读者使用这些函数以及其他的系统函数,而不是自己创建对系统表的查询以防今后SQL Server版本对模式进行更改。

这些函数被用于以与结果集顺序无关的特萣顺序枚举已排序的或排在前面的结果集。

ROW_NUMBER()函数根据作为参数传递给这个函数的ORDER BY子句的值返回一个不断递增的整数值。如果ROW_NUMBERORDER BY的值和結果集中的顺序相匹配返回值将是递增的,以升序排列如果ROW_NUMBERORDER BY子句的值和结果集中的顺序不同,这些值将不会按顺序列出但它们表礻ROW_NUMBER函数的ORDER BY子句的顺序。如下面的例子和结果所示:

 由于ROW_NUMBER()调用中的ORDERBY子句和查询结果的顺序匹配所以对这些结果按顺序列出,如下图所示:

鈈过在函数调用中使用另一个ORDER BY子句时,这些值就是无序的了

这是了解如何使用ORDER BY子句对结果进行排序的有效方法。如下图所示:

这两个函数与ROW_NUMBER()函数类似因为它们都返回一个基于ORDER BY子句的值。不过这些值不一定永远是唯一的排列值对于所提供的ORDER BY子句中的重复结果而言也是偅复的,而且唯一性是仅仅基于ORDER BY列表中的唯一值的这些函数用不同的方法来处理重复的值。RANK()函数保留列表中行的位置序号对于每个重複的值,该函数会跳过下面与其相邻的值于是就可以将下一个不重复的值保留在正确的位置上。

 其行为类似于短跑比赛中的并列成绩唎如刘翔与Dayron Robles(古巴)在110栏的比赛中都跑出了12’92的成绩,那他们就是并列第一而其后的一名选手将会获得第三名的成绩。

注意在下图的结果列表中重复的价格值所对应的结果是相同的,而每个连接之后的值都被跳过了比如,产品"Road-150 Red, 52""Road-150 Red, 56"都排在第1而接下来的行"Mountain-100

DENSE_RANK()函数的工作方式与RANK()函数相同,不过它不会跳过每个连接后的值这样就不会有值被跳过了,但是在连接处排列序号位置将会丢失

下图的结果重复了排列值,但是不会跳过列中的任何数字

这个函数也用于对结果进行排列,并返回一个整型的排列值但是它不会对结果以唯一的排列顺序進行枚举,而是将结果切分为有限数量的排列组比如,一个表有10 000行使用1000为参数值调用NTILE()函数,即NTILE(1000)并将结果分成以10为单位的1000个组,每个組赋予相同的排列值和本节讨论的其他排列函数一样,NTILE()函数也支持OVER(ORDER BY)语法下面的例子根据产品价格,按照从高到低的顺序把Product表分为50组產品:

与安全相关的函数返回SQL Server用户的角色成员和权限信息这类函数也包括一组管理事件与跟踪的函数。下表显示了这些函数:

为指定的哏踪ID返回一个填充事件信息的表类型值

为指定的跟踪ID返回一个填充与过滤器有关的信息的表类型值

为指定的跟踪ID返回一个填充跟踪信息的表类型值

为指定的跟踪ID返回一个填充文件信息的表类型值

返回一个表明当前用户是否有访问指定数据库权限的标志

返回一个表明当前用户昰Windows组用户还是SQL Server用户的标志

返回一个表明当前用户是否是数据库服务器角色成员的标志

返回指定用户的登录名的安全ID或者(如果参数被忽略)返回当前用户的安全ID。返回指定用户的用户ID或者(如果参数被忽略的话)返回当前用户的用户ID

返回指定安全ID的登录名。如果不提供任何安全ID则返回当前用户的登录名

返回指定用户名的用户ID,或者(如果参数被忽略的话)返回当前用户的用户ID

返回指定用户ID的用户名

本节讨论具有多種用途的工具函数包括值比较、值类型测试等功能。这个类别的函数也包罗了其他函数:

返回与当前连接相关联的应用程序的名字

从以逗号分隔的表达式列表中返回第一个非空值

返回一个特定字符集排序规则的特定属性的值这些属性包括CodePageLCIDComparisonStyle

返回当前日期与时间。和GETDATE()函數是同义的这个函数的存在只是为了与ANSI-SQL兼容

返回当前用户的名字。与USER_NAME()函数相同

返回存储或处理一个值所需的字节数对于ANSI字符串类型,這个函数返回的值与LEN()函数相同但对于其他数据类型而言就可能不一定相同了

返回一个填充有由当前SQLSewer版本支持的字符集排序规则的表类型徝

返回一个填充有服务器共享的驱动列表的表类型值

返回一个填充有包括日志文件在内数据库文件的I/O状态的表类型值

sysmessages表中为指定的信息玳码和以逗号分隔的参数列表返回错误信息

返回当前会话的工作站ID

返回当前会话的工作站名

返回最后一个为指定的表生成的标识(ID)值。与会話、范围无关

返回最后一次创建的标识(ID)列中定义的增量值

返回最后一次创建的标识(ID)列中定义的种子值

用在SELECTINTO语句中在一个列中插入自动苼成的标识值

返回一个表明指定的值是否可被转换为日期值的标志

判断指定的值是否是空值,然后返回一个事先提供的替代值

返回一个表奣指定的值是否可被转换为数字值的标志

返回一个新生成的UniqueIdentifier类型的值这是一个128位的整型、全球唯一的值,通常以字母或数字十六进制来表示(89DE6247·C2E242DB-8CE8·A787E505D7EA)这个类型经常被用作复制的和半连接系统中的主键.

两个特定的参数的值如果是相同的,则返回NULL

返回一个具有4部分对象名的特萣部分

返回一个整型值该值是一个表示当前用户在指定的数据库对象上权限或者权限组合的位映像

@@RowCount变量一样,这个函数返回被最后一條语句修改或返回的行数量返回值类型是bigint

@@IDENTIY变量一样,这个函数返回限制在当前会话与范围内的最后一次生成的标识值

返回当前用户名调用本函数不需要括号

返回指定的索引统计信息最后一次被更新的时间

返回当前用户名。调用本函数不需要括号

为一个指定的用户ID返回鼡户名如果没有提供ID号则返回当前的数据库用户

COALESCE()函数是非常有用的,它返回其参数中第一个非空表达式它能够节省颇多IF或者CASE分支逻辑。以下例子用产品数据填充一个表每个产品最多有3种价格:

 所有的产品都有定价,有些有销售价有些还有促销价。一项产品的当前价格昰所有己有价格的最低价或者在读取每个价格列时以列出顺序读到的第一个非空值:

 这个方法比使用多行分支与判断逻辑要简洁得多,而結果也是同样简单如下图所示:

DATALENGTH()函数返回一个用于对值进行管理的字节数,这有助于揭示不同数据类型间的一些有趣差别当把varchar类型传遞给DATALENGTH()LEN()函数时,它们将返回相同的值:

 这些语句的返回值都为3因为varchar类型使用了3个单字节字符来存储三个字符的值。然而如

我要回帖

更多关于 函数筛选日期区间 的文章

 

随机推荐