作者MOONRAKER (㊣科学秘招!雷电闪光!)
看板PHP
标题Re: [请益] 比大小的问题
时间Tue Jan 3 11:57:21 2012
※ 引述《rm031023 (土拨鼠)》之铭言:
[前略]
: 我的想法是可不可以先忽略>符号,把这些有>符号的做记号,
: 然後把型态变成int来比大小,
: 在输出的时候在这些有>符号的值上值上做记号,然後在标注有做记号的是有>符号的。
虽然mysql没有原生支援regex replace
不过你的问题用一个if()和一个转型就可以处理。
mysql> SELECT * FROM exp0 ORDER BY id;
+----+--------+
| id | stmt |
+----+--------+
| 1 | 100 |
| 3 | 1138 |
| 4 | 2520 |
| 5 | >8000 |
| 6 | >1024 |
| 7 | >32767 |
| 9 | 10575 |
| 10 | 65535 |
| 11 | >3072 |
+----+--------+
9 rows in set (0.00 sec)
mysql> SELECT
-> CAST(
-> IF(SUBSTRING(stmt, 1, 1) BETWEEN '0' AND '9',
-> stmt,
-> SUBSTRING(stmt, 2)
-> )
-> AS SIGNED) AS stmtclean
-> , stmt
-> FROM exp0
-> ORDER BY stmtclean;
+-----------+--------+
| stmtclean | stmt |
+-----------+--------+
| 100 | 100 |
| 1024 | >1024 |
| 1138 | 1138 |
| 2520 | 2520 |
| 3072 | >3072 |
| 8000 | >8000 |
| 10575 | 10575 |
| 32767 | >32767 |
| 65535 | 65535 |
+-----------+--------+
9 rows in set (0.00 sec)
这样你就同时得到不含符号的数字和含符号的原始资料,并且按大小排列。
if和substring的用法可以自己看文件。cast as signed的原因是如果不这样做
会照字串规则排列大小,8000会跑到最後。
不过你实在应该去db版才对…
--
从前有个马铃薯王国 有个高贵伟大的国王
有的人尊敬他 有的人畏惧他 但有个人敢看不起他不只是一条龙
嘿呵 快出动 去征服 去摆平 嘿呵 快出征 去征服那条龙
嘿呵 快出动
(宰了它!轰了它!)嘿呵 快出征 去征服那条龙
:■ Potatoes and Dragons (C)Alphanim France 2004-05 :.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.120.49.163
1F:推 kusoayan:这招好帅! 01/03 21:09
2F:推 rm031023:谢谢~可是如果是要用WHERE来做筛选的话,是要怎麽写呢? 01/03 21:10
3F:→ rm031023:WHERE stmt <5000 ??? 好像不是这样,试了一下怪怪的.. 01/03 21:11
4F:→ rm031023:>1024会被输出 01/03 21:13
5F:→ MOONRAKER:阿不是有select出来stmtclean给你 01/04 01:29
6F:→ MOONRAKER:那就可以用在where条件里面啦 这点MySQL比MS的方便 01/04 01:30
7F:→ qwertmn:可以试试看having ... 01/04 07:55
8F:推 rm031023:谢谢二位,问题解决了,感恩 01/04 09:49
9F:推 leecoco:推~~ 01/04 20:45