强制类型转换

MySQL中提供了两个函数来实现强制类型转换,分别为convert和cast,这两个函数在将一个数值转换为其他类型时的作用几乎一样,写法上略有不同,但convert函数可以将一个值转为其他编码。参考MySQL手册说明:

编码转换:CONVERT(expr  USING transcoding_name),如

image

类型转换:CONVERT(expr , type) 或者 CAST(expr AS type),其中type为以下类型中的一种

  • BINARY [(N)]  转为二进制字符串,后面N为限定长度,有关BINARY类型的参考点这里
  • CHAR [(N)]
  • DATE   日期
  • DATETIME  日期时间
  • DECIMAL [(M[,D])]   转为浮点数,M为数字的长度(包括整数部分和小数部分),N为小数点后位数

转为DECIMAL类似C语言中的atoi函数,即从头扫描字符串直到第一个不为数字的字符截至,对截断的那一位进行四舍五入取整。

默认不限定M,N,转换是转为整数,按照小数点后第一位进行四舍五入。

image

限定M不限定N,则根据数字的位数输出整数,需要注意的是,当M的长度小于实际的数字位数时,会转化成设定为最大的,如下面这个转换,由于设置M为1,即显示不了21这个两位数,就会显示 1位数中最大的9。如果对于设定了小数点后位数N的限定,也会这样转换,同时必须先满足小数点后的N位小数。

image 位数不够显示全部,则

image  满足了1位小数,再取1位整数

image 必须先满足2位小数,不取整数部分。

正常的转换如下,尽可能的将M设置大,而N根据自己的需要选择保留几位小数。

image保留一位小数,第二位四舍五入

image保留两位小数

image保留三位小数,加0补齐位数

需要注意,尽管M可以设置的足够大而不影响数字的长度,但转换依然会先满足小数位数N的需要

image 满足9位小数,只剩1位整数只能取9。

  • SIGNED 有符号整数
  • TIME 日期的时间部分
  • UNSIGNED 无符号整数

image

其中上面的’2’-3由MySQL自动做了一次强制类型转换,根据四则运算将’2’转为了数字2。

自动类型转换

在进行一些四则运算以及逻辑运算时,MySQL也会根据计算的类型以及操作数的类型进行自动转换。

image 四则运算,转为数字操作

image 逻辑运算,转为0或1

image 位操作,转为数字的二进制位。

也可以一些自动进行数字以及字符串向date的转换,例如下面的操作

image

写码过程中碰到这样一个需求。一个table中一列是varchar类型,但是输入的类似是’1.23/张’ 这样的数据,即前面是一个类似单价的东西,后面只是加了一个说明,另外一列为int,需要计算两列的乘积。有了MySQL这样的自动类型转换,就不需要select后逐条的进行atoi的操作,并计算结果进行update了,特别是其中某些列中的数据不全,即varchar为NULL或者int为NULL,会自动不处理,相当的方便哈。如下。

image

最后一句,大爱MySQL哈!!!

, , , ,

搜索引擎利用IR的方法对于一个特定的query检索出该关键词上的出价广告后,就需要对SERP页面上的广告栏分配给出价的广告主,牵扯到搜索广告的排序问题。一般共识是左侧的广告位(即搜索结果页上面的广告位)被看到和点击到的可能性最大,后侧的则按照从高到底排序,越靠上的广告位越好。简单的说就是谁出钱多谁得到的位置越好,复杂的研究这里面牵扯到博弈论之类的问题,假设存在n个对该关键词出价的广告主,k个广告位,每个广告主衡量自己想得到的广告位的价值,并根据他人的出价(有可能是透明,有可能不透明)来决定自己的出价,从而达到自己的宣传效果,同时又想尽可能的减少广告的CPC,而广告竞价又是一个不断变化的过程,如何达到某种相对的均衡状态。

常用竞拍模式

  • First-Price Sealed-bid:一次性竞价,所有人同时出价,出价最高者获得物品,并支付他的出价。
  • Second-Price Sealed-bid:出价方式同上,不同的是实际的支付价格是第二高的竞价。Vickrey拍卖。
  • Open Ascending-bid:最常见的竞价方法,轮流喊,谁喊的最高谁拿,支付他的出价。称为英式拍卖。
  • Open Descending-bid:荷式拍卖,拍卖人从高到低不断的减少定价,第一个能接受价格的人获得物品。

搜索广告的拍卖

Generailized Frist-Price Auction(GFP):第一代拍卖方式,由Overtune.com提出,按照广告主的出价高低对广告进行排名,也引入了CPC机制,使得Overtune.com获得了巨大的成功并成为Yahoo和MSN的SE提供服务。GFP的结果是出价十分不稳定,动态的环境中每个广告主都会不断的调整自己的出价,希望尽可能的降低CPC,获得更高的回报。例如由两个广告位,分别吸引到200个Click和100个Click,之前的出价分别为4$和2$,但可能会不断的调整,调整到2$和2.01$。此时有可能广告主希望获得第一个广告位,出价2.02$,就这样不断的递增,然后递增到一定阈值后,索性放弃,又降到最低的2$,再一次竞价,该过程甚至可以由robot来完成,如下图。

image

Generailized Second-Price Auction(GSP):Google与2002年实现,即每个广告主获得第i个位置实际支付的CPC由第i-1高的支付价决定,可能会略高一点(0.01$),随后Overtune和Yahoo也采用了GSP这种方式,对广告主出价博弈更加友好。GSP的方式一般分为两种

  1. Bid Ranking:按照广告的出价排序,位于第i位的广告的实际CPC为第i+1位的出价,如下图5个广告主在las vagas travel关键词上出价,有4个广告位:               image
  2. Revenue Ranking:按照实际的收益排序,此类排名考虑了每个广告的质量评分,即每个广告的CTR(表示的是广告与query的相关度,广告本身质量等,与位置无关的CTR), 这样可以避免用户看到一些无关的、比较粗糙的广告会对搜索引擎本身产生反感。位置i上的广告主实际支付价格为 bid(i+1)*ctr(i+1)/ctr(i),如果自身广告的质量评分远高于低一位的广告,则可以获得更低的支付价格。image

迄今为止,使用最广告的竞价是GSP,该模型简单有效,也容易向客户进行解释,同时采用广告评分机制,能激励广告商尽可能的优化自己的广告,良好的广告信息对搜索引擎是有益的,对用户是友好的。此外,Vickery-Clark-Groves(VCG)拍卖也会在各个广告拍卖模型中被提起,VCG模型是一次性的对k个物品,n个竞拍者进行拍卖的过程,每一个竞拍者的实际出价由该竞拍者参与后对系统中其他竞拍者带来的损失决定。假设有两个广告位点击率分别为200和100,三个竞价者出价分别为$10,$4,$2。按照VCG模型,获得第二个广告位的人应该支付的价格为$2*100=$200,即因为他的参与,使得出价$2的参与者失去了第二个广告位,系统损失为$200。而第一个广告位获得者的支付价格为$600=$400+$200,$200是由于他的参与使得第三个竞拍者未获得广告位,而$400=$4*100,即他的参与使得出价$4的竞价者失去了以$4的CPC点击100次的广告效应。VCG的计算过程和讲解过程都很复杂,还没找到确切的文档资料说某个搜索引擎完全采用了VCG,有一些猜测G可能换了VCG。

VCG最主要的特性是truth-telling的占优策略,即如何所有的竞价者都真实的评估自己所想要得到的广告位价值,并按照此标准出价。而对于GSP动态中的均衡,Edelman引入了一种Locally envy free equilibrium,是纳什均衡的一种特例,在这种均衡状态下,每一个广告主都无法通过和自己前一位的广告交换出价交换位置得到更高的payoff。(payoff = c(i) * [v(i) – p(i)], c(i)是第i个位置的点击率,v(i)是广告主对第i位的真实估算价值,p(i)是实际的CPC)。

实际上搜索广告的排序除了出价以及广告质量外,还可能受其他各种各样的因素的影响,包括用户的地域、广告主的余额,以及广告主设定的策略等。

参考资料

Internet Advertising and the Generalized Second Price Auction, Edelman

,