Oracle 的随机数、随机日期和时间、随机字符串 Oracle与Unix时间戳的转换

1. 随机数包

SELECT DBMS_RANDOM.VALUE
  FROM DUAL;

2. 在[0..100]范围内取随机数

SELECT TRUNC (DBMS_RANDOM.VALUE (0, 100))
  FROM DUAL;

3. 大于字符‘A’的10个字符随机字符串

SELECT DBMS_RANDOM.STRING ('A', 10)
  FROM DUAL;

4. 单个小写随机字符

SELECT CHR (ROUND (DBMS_RANDOM.VALUE (97, 122)))
  FROM DUAL;

5. 在过去10天内取随机日期

SELECT TO_DATE (TRUNC (DBMS_RANDOM.VALUE (TO_NUMBER (TO_CHAR (SYSDATE - 10,
                                                              'J'
                                                             )
                                                    ),
                                          TO_NUMBER (TO_CHAR (SYSDATE, 'J'))
                                         )
                      ),
                'J'
               )
  FROM DUAL;

6. 在过去30分钟内取随机时间

SELECT (SYSDATE - 1 / 24 / 60 * 30) + DBMS_RANDOM.VALUE (1, 1800) / 3600 / 24
  FROM DUAL;

Oracle随机函数

Sql代码
--创建55到100之间随机数   

select dbms_random.value, dbms_random.value(55,100)  from dual;    

--创建2009年内的随机时间   

SELECT
to_timestamp('2009-01-01 00:00:01','yyyy-mm-dd HH24:MI:SS') +DBMS_RANDOM.VALUE(1,365*24*3600)/3600/24
FROM DUAL    

--随机查看前N条记录(随机读取表内容)   

SELECT * FROM (SELECT * FROM chifan  ORDER BY dbms_random.random) WHERE ROWNUM< =5

unix/linux 时间戳转换为标准时间格式(主要是注意时区问题):

sql代码

select TO_DATE('19700101','yyyymmdd') + 1235728935/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24 from dual,其中1235728935就是unix/linux时间戳,转换完之后就表示为 2009-2-27 18:02:15。

反过来也一样,还是要考虑时区

select (to_date('2009-2-27 18:02:15','yyyy-mm-dd hh24:mi:ss') - to_date('1970-1-1','yyyy-mm-dd'))*86400- TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))*3600 from dual
2010年9月2日 | 归档于 oracle
标签:

php 高级编程之编码风格

php 高级编程之编码风格

1 Code Formatting and Layout 代码格式和布局

Indentation 缩格

Although indentation is not mandatory in PHP, it is a powerful visual organization
tool that you should always consistently apply to code.
尽管缩格在PHP中不是强制的(python中确实语法),它是强有力的视觉组织工具,你应该一直坚持在代码中使用它

考虑下述代码:

if($month == ‘september’ || $month == ‘april’ || $month == ‘june’ || $month ==
‘november’) { return 30;
}
else if($month == ‘february’) {
if((($year % 4 == 0) && !($year % 100)) || ($year % 400 == 0)) {
return 29;
}
else {
return 28;
}
}
else {
return 31;
}

跟下面这段代码进行比较

if($month == ‘september’ ||
$month == ‘april’ ||
$month == ‘june’ ||
$month == ‘november’) {
    return 30;
}
else if($month == ‘february’) {
    if((($year % 4 == 0) && ($year % 100)) || ($year % 400 == 0)) {
        return 29;
}
else {
    return 28;
}
}
else {
    return 31;
}

这段代码后者的版本比前者更容易去理解整体的逻辑循环。 阅读全文…

2010年8月27日 | 归档于 php
标签:

简单的PHP socket编程

< ?php
/**
* 客户端代码
*/

error_reporting(0);
set_time_limit(0);
echo ” TCP/IP Connection \n”;

$service_port = 10001;
$address = “127.0.0.1″;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false)
{
echo “socket_create() failed: reason: ” . socket_strerror(socket_last_error()) . “\n”;
die;
}
else
{
echo “OK.\n”;
}

echo “试图连接 ‘{$address}’ 端口 ‘{$service_port}’…\n”;
if (socket_connect($socket, $address, $service_port) == false)
{
$error = socket_strerror(socket_last_error());
echo “socket_connect() failed.\n”,”Reason: {$error} \n”;
die;
}
else
{
echo “连接OK\n”;
}

$in = “Hello World\r\n”;
if (socket_write($socket, $in, strlen($in)) === false)
{
echo “socket_write() failed: reason: ” . socket_strerror(socket_last_error()) .”\n”;
die;
}
else
{
echo “发送到服务器信息成功!\n”,”发送的内容为: $in \n”;
}

$out = ”;
while ($out = socket_read($socket, 8192))
{
echo “接收服务器回传信息成功!\n”,”接受的内容为:”, $out;
}
echo “关闭SOCKET…\n”;
socket_close($socket);
echo “关闭OK\n”;
?>

< ?php
/**
* 服务器端代码
*
*/

//确保在连接客户端时不会超时
set_time_limit(0);

//设置IP和端口号
$address = ‘127.0.0.1′;
$port = 10001; //调试的时候,可以多换端口来测试程序!

//创建一个SOCKET
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false)
{
echo “socket_create() 失败的原因是:” . socket_strerror(socket_last_error()) . “\n”;
die;
}

//阻塞模式
if (socket_set_block($sock) == false)
{
echo “socket_set_block() 失败的原因是:” . socket_strerror(socket_last_error()) . “\n”;
die;
}

//绑定到socket端口
if (socket_bind($sock, $address, $port) == false)
{
echo “socket_bind() 失败的原因是:” . socket_strerror(socket_last_error()) . “\n”;
die;
}

//开始监听
if (socket_listen($sock, 4) == false)
{
echo “socket_listen() 失败的原因是:” . socket_strerror(socket_last_error()) . “\n”;
die;
}

do
{
if (($msgsock = socket_accept($sock)) === false)
{
echo “socket_accept() failed: reason: ” . socket_strerror(socket_last_error()) . “\n”;
die;
}

//发到客户端
$msg = “welcome \n”;
if (socket_write($msgsock, $msg, strlen($msg)) === false)
{
echo “socket_write() failed: reason: ” . socket_strerror(socket_last_error()) .”\n”;
die;
}

echo “读取客户端发来的信息\n”;
$buf = socket_read($msgsock, 8192);
echo “收到的信息: $buf \n”;

socket_close($msgsock);
} while (true);

socket_close($sock);
?>

2010年8月25日 | 归档于 php, socket
标签:

socket中的shutdown与close区别

socket关闭close和shutdown

socket关闭有2个close,shutdown

阅读全文…

2010年8月25日 | 归档于 socket
标签:

Socket 的阻塞工作方式和非阻塞工作方式的区别

阻塞模式和非阻塞模式的主要区别在于无请求来到时,阻塞模式会一直停在接收函数即accep函数,直到有请求到来才会继续向下进行处理。而非阻塞模式下,运行接收函数,如果有请求,则会接收请求,如果无请求,会返回一个负值,并继续向下运行。
一般来说,使用阻塞模式的程序比较多,因为阻塞模式是由内核保障等待请求的,当他阻塞时不占用系统资源,而非阻塞模式需要我们人工轮询,占用资源较多。另外,阻塞模式可以使用select函数设置超时时间

2010年8月25日 | 归档于 socket
标签:

重装ORACLE console 服务

emca -repos drop
emca -repos create
emca -config dbcontrol db

执行以上命令,先卸载EM,并重新安装。
阅读全文…

评论关闭
2010年7月20日 | 归档于 oracle
标签:

网络游戏运营的数据分析(转载)

现如今的人,特别是刚学到点东西的人,特别爱看数据,拿着几个半业余、或者带有某种商业目的的数据把自己装扮得很权威。

当然,也有一群新手策划,根本没有机会接触到网络游戏的运营数据,他们认为数据完全无用,而网络游戏中的各种重要数据,大多在pc网游和手机网游同样适用。

1、 用户数量

a) 某游戏用户数量–注册用户。

这个数据其实相当无用的,因为每个不同项目注册用户的质量完全不同。前两年被用得很广泛,用来宣传“我们的游戏拥有了xxx用户”,当然,有几个是真实的呢?连运营商给出来就不真实的话,那些数据调查报告的真实性呢?(“你们用户多少啦?”“13万注册用户”,“才这么点,我们有个网站500万”。。。他根本没有明白用户质量的意义)

b) 在线人数

i. 最高在线—-在某个时间能达到的最高在线,想到这个词,就想到了a3,强大的市场宣传能力,和推广能力,让他们敢在公测第一天说15万人在线,然而几个月时间,游戏中的玩家走光了。

ii. 活跃人数—-这个数据也是最具欺骗性的数字,如果一个活跃人数不带上时间,哪怕是真实的,都没有任何参考意义。必须是“每日活跃用户”、“每周活跃用户”“每月活跃用户”“每季活跃用户”、“最近多少天内活跃用户”等等。也就是在这段时间内进入游戏的人。

iii. 每个活跃用户的平均在线时间—-上面说了活跃用户数,如果没有本数据,上面的那个也是没有意义的。如果每个用户都上来2分钟,马上就下去,这样的活跃用户的价值是多少呢?能和一上来就十几个小时在线的玩家等值么?平均每个活跃用户上来究竟玩多久?这是网络游戏中一个特别需要注意的数据。

iv. 游戏平均在线人数—一这是个非常重要、有价值的参数,但仍然不是绝对唯一的决定因素。

1) 24小时内平均的在线人数,数据采样时间越密集,越精确。

2) 不同的游戏,每一个平均在线是由不同数量的用户造就的。例如一个好的游戏,可以大量的粘住玩家的时间,让玩家长时间舍不得下线。

3) (每24人*小时)等于一个平均在线

4) 如果你能让每次上来的活跃用户,每次平均在线6小时,那么你需要4个活跃用户,就能多一个平均在线了,如果你的游戏每次只让用户玩5分钟,他就走了,哪怕你的游戏非常好,他每天都上来5分钟,那么你必须有60/5*24=288个活跃用户,才能达到一个平均在线人数。你要根据你的游戏用户特性,判断推广多一个活跃用户容易,还是增加游戏的粘着度更容易。

c) 一般来说,平均在线、总注册用户、活跃人数、以及最高在线有一个比例

曾经有专家说是xxxx是4%,xxxx是8.7%等,他们可能是针对某款他们所能接触到的网络游戏的数据而来的,但是如果你只听了这个,不知道这个数据是在其他各种什么条件下产生的,你就错了,每款产品都是不一样的,这个比例随着不同的市场、不同的产品、不同的渠道、不同的服务,会导致精确数据和比例完全不一样。哪怕一模一样相同的产品,都可能完全不一样的数据,别人注册100万用户能有3万在线,不代表你宣传注册100万,就也一定有3万。双方的各方面细节太多了,资本家很少看全面企业家成功创业者所付出的所有努力。

数据是用来参考的、辩证型论证的,用来与其它相关事务关联的,单独的某个数据,往往不具备论证力度。不同项目的数据具有不一致性。 阅读全文…

评论关闭
2010年7月14日 | 归档于 数据分析
标签:

位向量和排序

对于排序问题,想必大家都非常熟悉。而且,应该都知道基于比较的排序方法的时间复杂度的下界是 O(n*logn)。尽管又出现了基数排序,使得排序类算法的时间复杂度改进到 O(d*n),但是基数排序方法实现起来还是比较麻烦的。下面这种排序方法的时间复杂度可以认为是 O(n),但是和基数排序方法相比,它的实现非常简单。
为了介绍这种方法,需要对输入数据作如下假定:(1)都是非负整数,(2)每个整数最多出现一次,(3)最大整数小于 n。
这种方法采用哈希函数的思想,用一个整型数组 array[n] 来实现对输入数据的排序工作。具体点就是:(1)初始化,将数组的每个元素清 0;(2)插入数据并实现排序,对于输入数据 i,置 array[i] 为 1; (3)输出排序结果,如果 array[i] 为 1,就输出整数 i。

这种方法的优点是,可以边输入数据边进行排序,这对于实时处理来说是非常合适的。当然它的缺点也是明显的,不能处理负数和小数,当输入数据的范围很大时,数组 array 会很大,要占据非常大的内存空间,这样对它的初始化就是一件比较费时的操作。

可能有人已经想到用 short int 类型数组,或者 bool 类型数组来实现算法,以达到减少所需内存空间的目的。这些想法的关键就是用较少的内存,或者说二进制位来标识每个数据。那么在计算机中标识每个数据最少需要多少位呢?1 位!

在实现这种方法之前,先看一下它的内存需求和以前相比由多少改进。如果我们用整型数组来实现排序,那么标识一个数据需要 32 位;如果用 bool 类型数组来实现,需要 8 位;最后,如果用下面要说的位向量来实现的话,标识一个数据只需 1 位。

所谓位向量就是由若干二进制位组成的一个向量。
例如 集合{1 ,2 ,3 ,5 ,8 ,13}用位向量来表示 就是 :0 1 1 10100100001000000 代表集合中的数值位都置1,其他所有的位都置为0 。 计数是 0-19 可以表示所有小于20 的非负整数集合。
阅读全文…

评论关闭
2010年7月5日 | 归档于 算法
标签:

FirePHP:像Firebug那样调试你的PHP代码(转)

    Firebug是一个最常用的Web前端调试工具,但你是否知道,PHP代 码也可以使用Firebug进行调试?是的,使用FirePHP,可以像Firebug那样,简单、直接的调试你的PHP程序。

如果你经常使用Firebug调试HTML、CSS、JavaScript和Ajax代码,一定会对 Firebug爱不释手,它方便快速且直观。但你是否想过用Firebug调试PHP程序?Firefox还有一个扩展叫FirePHP,一个可以像 Firebug一样方便的调试PHP程序。

FirePHP

这个在Firebug之上运行的扩展,结合一个服务器端的库,就可以让你的PHP代码向浏览 器发送调试信息,该信息以HTTP响应头(HTTP headers)的方式编码。经过设置,你可以像在Firebug控制台调试JavaScript代码一样得到PHP脚本的警告和错误提示。下面我们来看 看具体步骤。

首先,我们需要从Mozilla的Firefox扩展组件页面下 载FirePHP插件;在此之前,要确保我们已经安装了Firebug。完成FirePHP插件的安装后,再次打开Firebug面板,我们可以 看到除Firebug按钮之外,还有一个蓝色的按钮,那就是我们的FirePHP了。点击这个按钮,会出现一个菜单,提示您启用或禁用FirePHP。如 图:

FirePHP的Firebug控制台界面
FirePHP的Firebug控制台界面

这样我们基本完成了FirePHP的安装,但我们还需要一个FirePHP的服务器端的库,点击这里下载。 这是一个使用PEAR的版本,可以手动下载安装。

之后,我们需要将这个库include到我们的代码中。FirePHP还有一些版本是针对框 架和CMS设计的,比如WP-FirePHP是为WordPress定制的,JFirePHP是专为Joomla定制的。为了足够通用,这篇文章里我们将 把重点放在一些通用的功能上。

当我们的服务器上有了FirePHP library,我们需要使用下面一条简单的语句将它包含进来。

  1. require_once('FirePHPCore/fb.php');

因为FirePHP使用HTTP headers的形式发送数据,我们需要缓冲一下脚本的输出,这样可以确保响应请求可以包含生成的脚本。在PHP中,通过在代码顶部调用ob_start 方法来实现。

  1. ob_start();

完成了上面的步骤,我们就可以开始使用FirePHP。所要做的只剩下调用fb函数,无论是一个单独的标记还是一个定义的常量,都会生成一个标准的 记录,无论是警告、错误还是其他信息。如下图:

这段代码将会在Firebug控制台产生如下输出:

我们还可以使用FirePHP来跟踪程序的执行过程:通过FirePHP::TRACE常量,你可以看到行号、类名、函数名等。示例代码如下:

将会产生如下输出;

使用这个跟踪功能,可以愉快的调试代码,因为他让你知道真正的问题出现在那里。当然,我们还需要记住在代码交付之前删除这些FirePHP调试语 句。

FirePHP所能做的要比上面介绍的多得多。FirePHP还有一些附件功能 和面向对象的API值得我们去发现和探索。更多介绍可以通过FirePHP官网来了解。

原文:Debug PHP with Firebug and FirePHP

链接:http://www.sitepoint.com/blogs/2010/02/09/debug-php-firebug-firephp/

评论关闭
2010年5月17日 | 归档于 php
标签:

转 思维和语言随笔

设计新语 (new speak) 这种语言的目的,不仅仅是一种适合表达 Ingsoc 的世界观和思维习惯的媒介,更加要紧的是,其他的思维方式根本无法在新语下表达。 — George Orwell “1984“

语言是能够影响思维的,这一点基本上对语言和思维有认识的人都能够体会到。 阅读全文…

评论关闭
2010年4月13日 | 归档于 关于我
标签: