BLOG重新开放.
SORRY, 最近太忙太忙, 心思也比较倦怠, 最大的喜事是我儿子于2010.1.10顺利诞生了, 一切平安.
博客评论功能已经重新开放了, 欢迎大家评论.
另外我的服务器挺快的, 但是运行wordpress我自己很明显的感觉到打开wordpress的速度太慢了, 受不了. 准备近期换BLOG系统, 我目前正在开发的PHP版本的SmallMVC框架即将完工, 稍后将会使用本框架重新开发一个BLOG系统代替目前的.
感谢大家支持.
SORRY, 最近太忙太忙, 心思也比较倦怠, 最大的喜事是我儿子于2010.1.10顺利诞生了, 一切平安.
博客评论功能已经重新开放了, 欢迎大家评论.
另外我的服务器挺快的, 但是运行wordpress我自己很明显的感觉到打开wordpress的速度太慢了, 受不了. 准备近期换BLOG系统, 我目前正在开发的PHP版本的SmallMVC框架即将完工, 稍后将会使用本框架重新开发一个BLOG系统代替目前的.
感谢大家支持.
工作需要, 同事需要一个串口调试的小软件,网上的大多没刚好合适自己需要的功能, 于是帮他写了一个. ![]()
截图:

下载地址:
http://www.suiyuan.org/download/SerialPort.exe
这是C#写的,用的C#自带的SerialPort,软件很简单,有需要的可以下载用一下.
/*utf8编码时截取等长中英文字串*/ //英文标点[.,\"\\?!:_'] <? function substr_utf8($string,$start,$length) { //by aiou $chars = $string; //echo $string[0].$string[1].$string[2]; $i=0; do{ if (preg_match ("/[0-9a-zA-Z]/", $chars[$i])){//纯英文 $m++; } else {$n++; }//非英文字节, $k = $n/3+$m/2; $l = $n/3+$m;//最终截取长度;$l = $n/3+$m*2? $i++; } while($k < $length); $str1 = mb_substr($string,$start,$l,'utf-8');//保证不会出现乱码 return $str1; }
原文:http://aiou.javaeye.com/blog/371094
用的是SQL SERVER2K
现在有一张表,
大概字段
id(自增长), SNumber(站号, 001, 002, etc.), SName(站名),GTime(datetime,获取测站数据时间),Level(float, 测站数据)
现在大概有7,80个站, 每隔6分钟就会同时向数据库里添加一条记录.
现在想实现把同一天内相同时间过来的数据先按照SNumber排列, 再按gtime倒序排列,然后对数据重新编号(1,2,3,etc) 请问如何实现?
例如原始记录
id snumber sname gtime level
66 023 测站1 2009-12-17 10:00:00 50.12
65 058 测站2 2009-12-17 10:00:00 30.24
64 018 测站3 2009-12-17 10:00:00 83.01
63 018 测站3 2009-12-17 09:54:00 50.12
62 058 测站2 2009-12-17 09:54:00 30.24
61 023 测站1 2009-12-17 09:54:00 83.01
按照要求排序后结果为
newid snumber sname gtime level
1 018 测站3 2009-12-17 10:00:00 83.01
2 023 测站1 2009-12-17 10:00:00 50.12
3 058 测站2 2009-12-17 10:00:00 30.24
1 018 测站3 2009-12-17 09:54:00 83.01
2 023 测站1 2009-12-17 09:54:00 50.12
3 058 测站2 2009-12-17 09:54:00 30.24
正解:
CREATE TABLE taoistong (id int identity(1,1) ,snumber char(3) ,sname nvarchar(4) ,gtime smalldatetime ,level float ) INSERT INTO taoistong SELECT '023', N'测站1', '2009-12-17 10:00:00', 50.12 INSERT INTO taoistong SELECT '058', N'测站2', '2009-12-17 10:00:00', 30.24 INSERT INTO taoistong SELECT '018', N'测站3', '2009-12-17 10:00:00', 83.01 INSERT INTO taoistong SELECT '018', N'测站3', '2009-12-17 09:54:00', 50.12 INSERT INTO taoistong SELECT '058', N'测站2', '2009-12-17 09:54:00', 30.24 INSERT INTO taoistong SELECT '023', N'测站1', '2009-12-17 09:54:00', 83.01 SELECT (SELECT count(1) FROM taoistong b WHERE a.gtime=b.gtime AND a.snumber>=b.snumber) ,snumber,sname,gtime,level FROM taoistong a ORDER BY gtime DESC,snumber
PHP拾遗捡漏(一)
最近在看<PHP和MySQL WEB开发>第四版, 把一些基础知识又复习了一遍, 还是很有收获的.
边看边记录一些文字吧.
1. echo 输出字符串
双引号和单引号的区别
$foo = 'hello'; echo $foo.' world!<br />'; echo "$foo world!<br />"; echo '$foo world!<br />';
运行后, 可以看出第一第二两个语句是等价的, 而第三个语句则原样输出.
结论: 对于任何简单类型的变量, 都可以将变量写入到一个由双引号引起来的字符串中, 在双引号中, 变量名称将被变量值所代替.而在单引号中, 变量名称,或者任何其他文本都会不经修改而直接发送到浏览器端.
Heredoc字符串也是插补的, 就像双引号字符串.
2.正确理解标识符
PHP中, 标识符是区分大小写的, $foo和$Foo是不同的, 而函数名称则不区分大小写.
$foo = 'foo'; $Foo = 'Foo'; echo "$foo<br />"; echo "$Foo<br />"; echo bar()."<br />"; echo Bar()."<br />"; function bar() { echo 'bar'; }
3.引用
PHP中引用操作符&可以在关联赋值时使用. 通常, 在将一个变量的值赋给另外一个变量的时候, 将先产生原变量的一个副本, 然后再将它保存在内存的其它的一个地方.
例如
$a = 5; $b = $a; $a = 7; // 此时$a=7, 而$b仍然等于5
这两行代码首先将产生一个$a的副本, 然后再将它保存到$b中, 如果随后改变$a的值, $b的值不会有任何变化.
可以通过引用操作符&来避免产生$a的副本, 此时$a和$b都指向了内存中的相同地址.
$a = 5; $b = &$a; $a = 7; // 此时$a和$b都等于7
可以通过unset($a)来重置它们来改变所指向的地址, 重置并不会改变$b(7)的值.
4. “执行操作符, 它是一对反向单引号, PHP将试着将其间的命令当做服务器端的命令行来执行. 表达式的值就是命令的执行结果.
$out = `dir c:` // windows, Linux为 `ls -la` echo $out;
5. isset()和empty()
bool isset(mixed var)
该函数需要一个变量名称作为参数, 如果这个变量存在返回true,否则返回false. 也可以传递一个由逗号间隔的变量列表, 如果所有变量都被设置了. 返回true.
可以使用unset()来销毁一个变量.
函数empty()可以用来检测一个变量是否存在,以及它的值是否为空和非0, 相应的返回true和false.
简单的来说empty()比isset()多检测值的非空和非0状态.
6. range()可以使用range()函数自动创建一个按升序排列的数字数组.
// 例如以下的代码将创建一个1~10的数字数组 $numbers = range(1, 10); //range()函数具有一个可选的第三个参数, 这个参数允许设定值之间的步幅. 例如创建一个1~10之间的奇数数组 $odds = range(1, 10, 2); //range()函数也可以对字符进行操作, 如下 $letters = range('a', 'z');
7. 数组排序
使用sort()函数, sort()函数可以将数组按字母或数字升序进行排序
$products = array('Tires', 'Oil', 'Spark Plugs'); sort($products); $prices = array(100, 10, 4); sort($prices);
sort()函数的第二个参数是可选的, 这个可选参数可以传递SORT_REGULAR(默认值), SORT_NUMERIC或SORT_STRING, sort()函数是区分大小写的.
使用asort()和ksort()函数对关联数组排序
函数asort()根据数组的每个元素值进行排序.
函数ksort()根据数组的每个元素进行排序.
以上三个函数都使数组按升序排序, 它们每个都对应有一个反向排序的函数, 分别是rsort(), arsort(), krsort().
用户自定义排序usort()
usort()函数的参数分别是希望排序的数组和用户比较的函数的名称
// 这是一个普通的二维数组, 存储了3种产品的代码,说明和价格. $products = array(array('TLR', 'Tires', 100), array('OIL', 'Oil', 10), array('SPK', 'Spark Plugs', 4)); // 以下代码对订单数组中的第二列(说明)按字母进行排序 function compare($x, $y) { if ($x[1] == $y[1]) return 0; else if ($x[1] < $y[1]) return -1; else return 1; } usort($products, 'compare') // 同时实现反向排序 function reverse_compare($x, $y) { if ($x[1] == $y[1]) returnn 0; else if ($x[1] < $y[1]) return 1; else return -1; } usort($products, 'reverse_compare');
转载请注明出处: http://www.suiyuan.org
Recent Comments