如何评价雷海为夺得中国诗词大会第三季的冠军

回复

默认分类匿名用户 回复了问题 • 1 人关注 • 1 个回复 • 69 次浏览 • 2018-04-07 22:42 • 来自相关话题

ORACLE 日期加减操作

默认分类admin 发表了文章 • 0 个评论 • 16 次浏览 • 5 天前 • 来自相关话题

无论是DATE还是timestamp都可以进行加减操作。
可以对当前日期加年、月、日、时、分、秒,操作不同的时间类型,有三种方法:

1 使用内置函数numtodsinterval增加小时,分钟和秒
2 加一个简单的数来增加天
3 使用内置函数add_months来增加年和月

例:
对当前日期增加一个小时:
SQL> select sysdate, sysdate+numtodsinterval(1,’hour’) from dual ;

SYSDATE             SYSDATE+NUMTODSINTE
——————- ——————-
2010-10-14 21:38:19 2010-10-14 22:38:19
对当前日期增加50分种
SQL> select sysdate, sysdate+numtodsinterval(50,’minute’) from dual ;

SYSDATE             SYSDATE+NUMTODSINTE
——————- ——————-
2010-10-14 21:39:12 2010-10-14 22:29:12
对当前日期增加45秒
SQL> select sysdate, sysdate+numtodsinterval(45,’second’) from dual ;

SYSDATE             SYSDATE+NUMTODSINTE
——————- ——————-
2010-10-14 21:40:06 2010-10-14 21:40:51
对当前日期增加3天
SQL> select sysdate, sysdate+3 from dual ;

SYSDATE             SYSDATE+3
——————- ——————-
2010-10-14 21:40:46 2010-10-17 21:40:46
对当前日期增加4个月
SQL> select sysdate, add_months(sysdate,4) from dual ;

SYSDATE             ADD_MONTHS(SYSDATE,
——————- ——————-
2010-10-14 21:41:43 2011-02-14 21:41:43

当前日期增加2年
SQL> select sysdate, add_months(sysdate,12*2) from dual ;

SYSDATE             ADD_MONTHS(SYSDATE,
——————- ——————-
2010-10-14 21:42:17 2012-10-14 21:42:17

timestamp的操作方法与上面类似;
求两个日期之差:
例:求2007-5-23 21:23:34与当前时间之间的差值。
SQL> select sysdate-to_date(’20070523 21:23:34′,’yyyy-mm-dd hh24:mi:ss’) dt from
dual ;

DT
———-
1240.01623
如果两个日期直接相减,得到的结果是一个数据型,我们可能想要得到两个日期相差值表现形式为:
**年**月**日 **:**:**
SQL> SELECT NUMTOYMINTERVAL(MONTHS_BETWEEN(DT1, DT2), ‘month’) mon,
2         numtodsinterval(dt1-(add_months(dt2,trunc(MONTHS_BETWEEN(DT1, DT2)))
),’day’) DAY
3    FROM (SELECT SYSDATE DT1,
4                 TO_DATE(’20070523 21:23:34′, ‘yyyy-mm-dd hh24:mi:ss’) DT2
5          FROM DUAL)
6 ;

MON                  DAY
—————-     ———————-
+000000003-04        +000000021 00:40:15.999999999

即:3年 4 个月 21 天 00:40:15.99999999 查看全部


无论是DATE还是timestamp都可以进行加减操作。
可以对当前日期加年、月、日、时、分、秒,操作不同的时间类型,有三种方法:

1 使用内置函数numtodsinterval增加小时,分钟和秒
2 加一个简单的数来增加天
3 使用内置函数add_months来增加年和月

例:
对当前日期增加一个小时:
SQL> select sysdate, sysdate+numtodsinterval(1,’hour’) from dual ;

SYSDATE             SYSDATE+NUMTODSINTE
——————- ——————-
2010-10-14 21:38:19 2010-10-14 22:38:19
对当前日期增加50分种
SQL> select sysdate, sysdate+numtodsinterval(50,’minute’) from dual ;

SYSDATE             SYSDATE+NUMTODSINTE
——————- ——————-
2010-10-14 21:39:12 2010-10-14 22:29:12
对当前日期增加45秒
SQL> select sysdate, sysdate+numtodsinterval(45,’second’) from dual ;

SYSDATE             SYSDATE+NUMTODSINTE
——————- ——————-
2010-10-14 21:40:06 2010-10-14 21:40:51
对当前日期增加3天
SQL> select sysdate, sysdate+3 from dual ;

SYSDATE             SYSDATE+3
——————- ——————-
2010-10-14 21:40:46 2010-10-17 21:40:46
对当前日期增加4个月
SQL> select sysdate, add_months(sysdate,4) from dual ;

SYSDATE             ADD_MONTHS(SYSDATE,
——————- ——————-
2010-10-14 21:41:43 2011-02-14 21:41:43

当前日期增加2年
SQL> select sysdate, add_months(sysdate,12*2) from dual ;

SYSDATE             ADD_MONTHS(SYSDATE,
——————- ——————-
2010-10-14 21:42:17 2012-10-14 21:42:17

timestamp的操作方法与上面类似;
求两个日期之差:
例:求2007-5-23 21:23:34与当前时间之间的差值。
SQL> select sysdate-to_date(’20070523 21:23:34′,’yyyy-mm-dd hh24:mi:ss’) dt from
dual ;

DT
———-
1240.01623
如果两个日期直接相减,得到的结果是一个数据型,我们可能想要得到两个日期相差值表现形式为:
**年**月**日 **:**:**
SQL> SELECT NUMTOYMINTERVAL(MONTHS_BETWEEN(DT1, DT2), ‘month’) mon,
2         numtodsinterval(dt1-(add_months(dt2,trunc(MONTHS_BETWEEN(DT1, DT2)))
),’day’) DAY
3    FROM (SELECT SYSDATE DT1,
4                 TO_DATE(’20070523 21:23:34′, ‘yyyy-mm-dd hh24:mi:ss’) DT2
5          FROM DUAL)
6 ;

MON                  DAY
—————-     ———————-
+000000003-04        +000000021 00:40:15.999999999

即:3年 4 个月 21 天 00:40:15.99999999

令人难以理解的软件工程师:几千行代码能搞定的为什么要写几万行?【转]

默认分类admin 发表了文章 • 0 个评论 • 40 次浏览 • 2018-04-09 11:57 • 来自相关话题



我们公司的 Windows 版软体已经有十多年的历史,经过历代工程师的整治之后,内容已经凌乱不堪。过去三个月,我找时间自己重写了整个主程序。原本数万行的程序,被我重写的只剩下数千行,功能不变,效能更好,而且架构俨然。

前几天完成 Alpha 版之后,我不禁开怀大笑,笑声惊动整个办公室。

 



在重写这个程序的这段期间,前两个月,我每周花在这个程序上的时间应该不会超过四个小时。后来我趁着农历新年没事干,跑到公司加班数天,但是一天写程序的时间也不会超过四个小时。




通常我白天写两、三个小时的程序,遇到瓶颈就去忙别的事,或者干脆回家吃晚饭,晚上睡觉前,躺在床上用手机查一下资料,第二天上班走在路上,就会很自然的想到不错的解法。




写程序是一种创作,不是做苦工,不能每天在电脑前面枯坐十几个小时,否则超时工作,只会让自己的脑筋变得更糊涂。




我所认识的许多写程序高手,每天写程序的时间都不会太长。

 



1995 年的时候,有一天在美国盐湖城,我陪着趋势科技的创办人张明正扶着他爸爸过马路,他突然跟我说:「宜敬,我实在搞不懂,在软体这个行业,一个优秀的工程师的产出可以轻易抵得上一、二十个平庸的工程师,但是公司最多只要付他两、三倍的薪水。那为什么还有公司愿意付钱雇用那些很平庸的工程师呢?」




当时我博士刚毕业,当然不知道要如何回答他的问题;而现在过了这么多年,我还是不知道要如何回答那个问题。




而当时张明正会问我那个问题,应该是因为我介绍了几位同学跟朋友到趋势科技工作。那几位都是以一当十、以一当百的高手。趋势科技当时没有给他们十倍、百倍的薪水,但是对他们也不薄,给了他们不少的股票。




后来趋势在日本上市,我那几位朋友都成了亿万富翁,财富应该超过一般工程师的十倍、百倍吧?

 



写一个大型程序,并不是「人多好办事」。

如果是土木工程或是制造业,人越多、产出就越大。如果一个计画延误了,就多调一些人手过来帮忙。

但是在软体工程里,人越多,就越是难以协调,写出来的程序也往往品质越差、效能越糟糕。

这就是有名的”The Mythical Man-Month: Addingmanpower to a late software project makes it later"。

IBM在1960年代开发OS/360作业系统软体时,就发现了这个奇特的现象。

所以我也搞不懂,大型软体公司雇用了那么多的软体工程师干嘛?

 



我在当兵的时候,有一阵子在台中十军团的资讯中心担任资讯官。那时候我手下有两名资讯科系毕业的大专兵,但是我嫌他们两人写程序写的太慢,而解释给他们听更是费事,还不如我自己动手写比较快。

所以我就叫他们到一边凉快,所有的程序都由我来写就好。而他们两人觉得很不好意思,就泡了很好喝的奶茶给我喝。

后来我们成了很好的朋友。

 



写程序并不是写的越长越好、越厉害。

我年轻在台大资讯工程系的时候,会跟朋友炫耀说:「我写的程序语言编译程序,总共有一万多行耶。」

后来我去美国布朗大学读电脑科学博士,毕业的时候喜欢跟朋友炫耀:「我的博士论文那个程序,功能那么强大,但是我只用了七、八千行程序就搞定了耶。」

 



二流的软体工程师,喜欢把简单的问题弄的复杂,写出别人看不懂的程序。

一流的软体工程师,喜欢把复杂的问题简单化,写出架构清楚明白的程序,让人看了之后,觉得问题好像很简单。

三流的软体工程师会去崇拜二流的软体工程师,因为他们会觉得二流工程师写的程序都看不懂,一定是超级厉害;

三流的软体工程师不会去崇拜一流的软体工程师,因为他们会觉得一流工程师所做的事情都很好懂,好像都很简单。

只有一流的的软体工程师才会佩服一流的软体工程师,因为只有他们才能看的出来,其他的一流软体工程师厉害在哪里?

台湾的软体业如此,美国的软体业也大致如此。

 



直到1980年代末期,IBM一直是世界上最大的电脑公司。而当时 IBM 找了一些原来是做硬体制造的高阶主管来管软体部门。

那些高阶主管依照他们管理制造部门的经验,决定用KLOC (thousands linesof code),也就是每位软体工程师每年写出多少行程序来计算软体部门的效率。

结果软体工程师们都「短话长说」,写出一堆落落长又没有效率的软体程序。

 



要成为一流的软体工程师,必须熟悉了解电脑科学的各种基础理论,也必须累积长时间的实务经验。

我在布朗大学电脑科学系读博士修课的时候,程序作业的份量非常重。上作业系统(OperatingSystem)课的时候,教授要我们每个人独立写一个包含File System与 Process System的迷你Unix作业系统;

上编译程序(Compiler)课的时候,教授要我们每个人独立写一个 Compiler,而且每一个模组还必须用两个以上的方法写,然后互相比较;

而上 Andy Van Dam 教授的电脑图学,那简直就是人间炼狱。当时助教发问卷调查,发现每位学生每周花在写那堂课的程序的平均时间超过四十个小时,学生们几乎要群起造反。

但是修过上述那三门课而没有被当掉、又拿高分的,就成了懂理论又懂写程序的高手、高高手。

 



当年我在布朗大学读博士的时候,我估计我们系上像我这种等级的写程序高手,大概有十来个吧?

但是我们系上公认最厉害的写程序高手,还是我的指导教授 Prof. SteveReiss。他一个人大概抵得上五到十个我们这种等级的工程师。

关于他的传说很多。有一次我去他的办公室找他,看到他正在玩接龙游戏。他被我发现了,有点不好意思,赶紧跟我说,他觉得 Windows 上的接龙游戏很好玩,但是他没有 Windows 电脑,所以就花了四、五天,利用零散的时间在他自己的 Sun Work Station 上面写了一个类似的接龙游戏,包含彩色的图像接口等等。

想玩电玩就自己写一个?我很想笑,但又差点在我师父面前跪了下来。

 

十一

我在布朗大学认识的那些软体高手,后来真正以写程序为志业,然后写出伟大又广泛被使用的程序的,应该不多。

因为有些人后来去当大学教授,教授通常是不会自己写程序的。久了之后,我不知道他们的功力剩下多少?

有些人后来为了拿高薪,去一些大公司写一些很没营养又很无趣的程序。久了之后,我不知道他们的功力剩下多少?

有些人后来进入产业界工作,没多久就升上了管理职,而管理职人员通常是不会自己写程序的。久了之后,我不知道他们的功力剩下多少?

所以程序高手原本就不多,而一直继续在写程序的程序高手就更是稀有了。

 

十二

美国的软体业有一个老笑话:如果有两个工程师在同一个团队,一个很会写程序,另一个很不会写程序,那后来升上经理的,一定是那个不会写程序的。

因为团队需要那个会写程序的留下来写程序。

 

十三

我写程序的功力最高的时候,应该是二十多年前我刚拿到博士的时候,那时候我又懂理论、又累积了大量的写程序经验。我不敢说自己能以一当百,但是以一当十应该是绰绰有馀的。

只可惜,没多久之后我就升上了管理职,而当上了经理、协理、总经理之后,如果还自己写程序的话,那是会被别人笑的。

所以我就不再写程序了,而且我也学会,要在自己的部门多摆一些工程师,否则阵仗不够大,会被别的部门瞧不起,也会被我的上司瞧不起。

二十年下来,我的功力大概只剩下两三成。

 

十四

我现在终于自己当了老板。而当上了老板之后,最大好处之一,就是我高兴写程序就可以写程序。就算有人要笑我,我也可以不理他们。

 

十五

我趁过年期间重写了我们公司的 Windows 主程序,完成之后,自觉功力已经恢复到当年的三、四成,不禁大乐。

不过我还是觉得,软体工程还真是一门很难以理解的行业。虽然我本身就是一个软体工程师,虽然我的博士论文研究的就是程序开发环境(Programming Environment),主题就是我在这边所说的这些问题。 查看全部


我们公司的 Windows 版软体已经有十多年的历史,经过历代工程师的整治之后,内容已经凌乱不堪。过去三个月,我找时间自己重写了整个主程序。原本数万行的程序,被我重写的只剩下数千行,功能不变,效能更好,而且架构俨然。

前几天完成 Alpha 版之后,我不禁开怀大笑,笑声惊动整个办公室。

 



在重写这个程序的这段期间,前两个月,我每周花在这个程序上的时间应该不会超过四个小时。后来我趁着农历新年没事干,跑到公司加班数天,但是一天写程序的时间也不会超过四个小时。




通常我白天写两、三个小时的程序,遇到瓶颈就去忙别的事,或者干脆回家吃晚饭,晚上睡觉前,躺在床上用手机查一下资料,第二天上班走在路上,就会很自然的想到不错的解法。




写程序是一种创作,不是做苦工,不能每天在电脑前面枯坐十几个小时,否则超时工作,只会让自己的脑筋变得更糊涂。




我所认识的许多写程序高手,每天写程序的时间都不会太长。

 



1995 年的时候,有一天在美国盐湖城,我陪着趋势科技的创办人张明正扶着他爸爸过马路,他突然跟我说:「宜敬,我实在搞不懂,在软体这个行业,一个优秀的工程师的产出可以轻易抵得上一、二十个平庸的工程师,但是公司最多只要付他两、三倍的薪水。那为什么还有公司愿意付钱雇用那些很平庸的工程师呢?」




当时我博士刚毕业,当然不知道要如何回答他的问题;而现在过了这么多年,我还是不知道要如何回答那个问题。




而当时张明正会问我那个问题,应该是因为我介绍了几位同学跟朋友到趋势科技工作。那几位都是以一当十、以一当百的高手。趋势科技当时没有给他们十倍、百倍的薪水,但是对他们也不薄,给了他们不少的股票。




后来趋势在日本上市,我那几位朋友都成了亿万富翁,财富应该超过一般工程师的十倍、百倍吧?

 



写一个大型程序,并不是「人多好办事」。

如果是土木工程或是制造业,人越多、产出就越大。如果一个计画延误了,就多调一些人手过来帮忙。

但是在软体工程里,人越多,就越是难以协调,写出来的程序也往往品质越差、效能越糟糕。

这就是有名的”The Mythical Man-Month: Addingmanpower to a late software project makes it later"。

IBM在1960年代开发OS/360作业系统软体时,就发现了这个奇特的现象。

所以我也搞不懂,大型软体公司雇用了那么多的软体工程师干嘛?

 



我在当兵的时候,有一阵子在台中十军团的资讯中心担任资讯官。那时候我手下有两名资讯科系毕业的大专兵,但是我嫌他们两人写程序写的太慢,而解释给他们听更是费事,还不如我自己动手写比较快。

所以我就叫他们到一边凉快,所有的程序都由我来写就好。而他们两人觉得很不好意思,就泡了很好喝的奶茶给我喝。

后来我们成了很好的朋友。

 



写程序并不是写的越长越好、越厉害。

我年轻在台大资讯工程系的时候,会跟朋友炫耀说:「我写的程序语言编译程序,总共有一万多行耶。」

后来我去美国布朗大学读电脑科学博士,毕业的时候喜欢跟朋友炫耀:「我的博士论文那个程序,功能那么强大,但是我只用了七、八千行程序就搞定了耶。」

 



二流的软体工程师,喜欢把简单的问题弄的复杂,写出别人看不懂的程序。

一流的软体工程师,喜欢把复杂的问题简单化,写出架构清楚明白的程序,让人看了之后,觉得问题好像很简单。

三流的软体工程师会去崇拜二流的软体工程师,因为他们会觉得二流工程师写的程序都看不懂,一定是超级厉害;

三流的软体工程师不会去崇拜一流的软体工程师,因为他们会觉得一流工程师所做的事情都很好懂,好像都很简单。

只有一流的的软体工程师才会佩服一流的软体工程师,因为只有他们才能看的出来,其他的一流软体工程师厉害在哪里?

台湾的软体业如此,美国的软体业也大致如此。

 



直到1980年代末期,IBM一直是世界上最大的电脑公司。而当时 IBM 找了一些原来是做硬体制造的高阶主管来管软体部门。

那些高阶主管依照他们管理制造部门的经验,决定用KLOC (thousands linesof code),也就是每位软体工程师每年写出多少行程序来计算软体部门的效率。

结果软体工程师们都「短话长说」,写出一堆落落长又没有效率的软体程序。

 



要成为一流的软体工程师,必须熟悉了解电脑科学的各种基础理论,也必须累积长时间的实务经验。

我在布朗大学电脑科学系读博士修课的时候,程序作业的份量非常重。上作业系统(OperatingSystem)课的时候,教授要我们每个人独立写一个包含File System与 Process System的迷你Unix作业系统;

上编译程序(Compiler)课的时候,教授要我们每个人独立写一个 Compiler,而且每一个模组还必须用两个以上的方法写,然后互相比较;

而上 Andy Van Dam 教授的电脑图学,那简直就是人间炼狱。当时助教发问卷调查,发现每位学生每周花在写那堂课的程序的平均时间超过四十个小时,学生们几乎要群起造反。

但是修过上述那三门课而没有被当掉、又拿高分的,就成了懂理论又懂写程序的高手、高高手。

 



当年我在布朗大学读博士的时候,我估计我们系上像我这种等级的写程序高手,大概有十来个吧?

但是我们系上公认最厉害的写程序高手,还是我的指导教授 Prof. SteveReiss。他一个人大概抵得上五到十个我们这种等级的工程师。

关于他的传说很多。有一次我去他的办公室找他,看到他正在玩接龙游戏。他被我发现了,有点不好意思,赶紧跟我说,他觉得 Windows 上的接龙游戏很好玩,但是他没有 Windows 电脑,所以就花了四、五天,利用零散的时间在他自己的 Sun Work Station 上面写了一个类似的接龙游戏,包含彩色的图像接口等等。

想玩电玩就自己写一个?我很想笑,但又差点在我师父面前跪了下来。

 

十一

我在布朗大学认识的那些软体高手,后来真正以写程序为志业,然后写出伟大又广泛被使用的程序的,应该不多。

因为有些人后来去当大学教授,教授通常是不会自己写程序的。久了之后,我不知道他们的功力剩下多少?

有些人后来为了拿高薪,去一些大公司写一些很没营养又很无趣的程序。久了之后,我不知道他们的功力剩下多少?

有些人后来进入产业界工作,没多久就升上了管理职,而管理职人员通常是不会自己写程序的。久了之后,我不知道他们的功力剩下多少?

所以程序高手原本就不多,而一直继续在写程序的程序高手就更是稀有了。

 

十二

美国的软体业有一个老笑话:如果有两个工程师在同一个团队,一个很会写程序,另一个很不会写程序,那后来升上经理的,一定是那个不会写程序的。

因为团队需要那个会写程序的留下来写程序。

 

十三

我写程序的功力最高的时候,应该是二十多年前我刚拿到博士的时候,那时候我又懂理论、又累积了大量的写程序经验。我不敢说自己能以一当百,但是以一当十应该是绰绰有馀的。

只可惜,没多久之后我就升上了管理职,而当上了经理、协理、总经理之后,如果还自己写程序的话,那是会被别人笑的。

所以我就不再写程序了,而且我也学会,要在自己的部门多摆一些工程师,否则阵仗不够大,会被别的部门瞧不起,也会被我的上司瞧不起。

二十年下来,我的功力大概只剩下两三成。

 

十四

我现在终于自己当了老板。而当上了老板之后,最大好处之一,就是我高兴写程序就可以写程序。就算有人要笑我,我也可以不理他们。

 

十五

我趁过年期间重写了我们公司的 Windows 主程序,完成之后,自觉功力已经恢复到当年的三、四成,不禁大乐。

不过我还是觉得,软体工程还真是一门很难以理解的行业。虽然我本身就是一个软体工程师,虽然我的博士论文研究的就是程序开发环境(Programming Environment),主题就是我在这边所说的这些问题。

ORACLE函数获取汉字拼音首字母

默认分类admin 发表了文章 • 0 个评论 • 39 次浏览 • 2018-04-09 09:49 • 来自相关话题

/*------增加:yl--*/
oracle 中 NLSSORT函数的用法

NLSSORT(),用来进行语言排序

拼音
SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_PINYIN_M')
笔划
SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_STROKE_M')
部首
SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_RADICAL_M')
/*------增加:yl end--*/

列表一行汉字
WITH A AS
(SELECT '获取汉字拼音首字母' W FROM DUAL)
SELECT SUBSTR(W, ROWNUM, 1) FROM A
CONNECT BY ROWNUM <= (SELECT LENGTH(W) FROM A);
返回结果










用汉字字符集对这个列表进行排序
WITH A AS
(SELECT '获取汉字拼音首字母' W FROM DUAL)
SELECT SUBSTR(W, ROWNUM, 1) FROM A
CONNECT BY ROWNUM <= (SELECT LENGTH(W) FROM A)
ORDER BY NLSSORT(SUBSTR(W, ROWNUM, 1), 'NLS_SORT=SCHINESE_PINYIN_M');
返回结果










那么根据这个原理,上面输入一个拼音A打头的字"澳",后面输入一个B大头的字"吧",找到每个音节的起止的汉字是哪个
WITH A AS
(
SELECT ROWNUM RN, CHR(ROWNUM) C FROM DUAL CONNECT BY LEVEL <= 65535
)
SELECT * FROM A WHERE LENGTHB(C) = 2
AND RN > 32768
AND NLSSORT(C, 'NLS_SORT=SCHINESE_PINYIN_M') > NLSSORT('澳', 'NLS_SORT=SCHINESE_PINYIN_M')
AND NLSSORT(C, 'NLS_SORT=SCHINESE_PINYIN_M') < NLSSORT('吧', 'NLS_SORT=SCHINESE_PINYIN_M')
ORDER BY NLSSORT(C, 'NLS_SORT=SCHINESE_PINYIN_M');
根据返回的结果,就能看到,A的结束和B的开始的汉子分别是:“驁” “八”,依次类推可以找到其他的分界点,那么最后的函数就是如下:

CREATE OR REPLACE FUNCTION F_TRANS_PINYIN_CAPITAL(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS
V_COMPARE VARCHAR2(100);
V_RETURN VARCHAR2(4000);

FUNCTION F_NLSSORT(P_WORD IN VARCHAR2) RETURN VARCHAR2 AS
BEGIN
RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M');
END;
BEGIN
FOR I IN 1..LENGTH(P_NAME) LOOP
V_COMPARE := F_NLSSORT(SUBSTR(P_NAME, I, 1));
IF V_COMPARE >= F_NLSSORT(' 吖 ') AND V_COMPARE <= F_NLSSORT('驁 ') THEN
V_RETURN := V_RETURN || 'a';
ELSIF V_COMPARE >= F_NLSSORT('八 ') AND V_COMPARE <= F_NLSSORT('簿 ') THEN
V_RETURN := V_RETURN || 'b';
ELSIF V_COMPARE >= F_NLSSORT('嚓 ') AND V_COMPARE <= F_NLSSORT('錯 ') THEN
V_RETURN := V_RETURN || 'c';
ELSIF V_COMPARE >= F_NLSSORT('咑 ') AND V_COMPARE <= F_NLSSORT('鵽 ') THEN
V_RETURN := V_RETURN || 'd';
ELSIF V_COMPARE >= F_NLSSORT('妸 ') AND V_COMPARE <= F_NLSSORT('樲 ') THEN
V_RETURN := V_RETURN || 'e';
ELSIF V_COMPARE >= F_NLSSORT('发 ') AND V_COMPARE <= F_NLSSORT('猤 ') THEN
V_RETURN := V_RETURN || 'f';
ELSIF V_COMPARE >= F_NLSSORT('旮 ') AND V_COMPARE <= F_NLSSORT('腂 ') THEN
V_RETURN := V_RETURN || 'g';
ELSIF V_COMPARE >= F_NLSSORT('妎 ') AND V_COMPARE <= F_NLSSORT('夻 ') THEN
V_RETURN := V_RETURN || 'h';
ELSIF V_COMPARE >= F_NLSSORT('丌 ') AND V_COMPARE <= F_NLSSORT('攈 ') THEN
V_RETURN := V_RETURN || 'j';
ELSIF V_COMPARE >= F_NLSSORT('咔 ') AND V_COMPARE <= F_NLSSORT('穒 ') THEN
V_RETURN := V_RETURN || 'k';
ELSIF V_COMPARE >= F_NLSSORT('垃 ') AND V_COMPARE <= F_NLSSORT('擽 ') THEN
V_RETURN := V_RETURN || 'l';
ELSIF V_COMPARE >= F_NLSSORT('嘸 ') AND V_COMPARE <= F_NLSSORT('椧 ') THEN
V_RETURN := V_RETURN || 'm';
ELSIF V_COMPARE >= F_NLSSORT('拏 ') AND V_COMPARE <= F_NLSSORT('瘧 ') THEN
V_RETURN := V_RETURN || 'n';
ELSIF V_COMPARE >= F_NLSSORT('筽 ') AND V_COMPARE <= F_NLSSORT('漚 ') THEN
V_RETURN := V_RETURN || 'o';
ELSIF V_COMPARE >= F_NLSSORT('妑 ') AND V_COMPARE <= F_NLSSORT('曝 ') THEN
V_RETURN := V_RETURN || 'p';
ELSIF V_COMPARE >= F_NLSSORT('七 ') AND V_COMPARE <= F_NLSSORT('裠 ') THEN
V_RETURN := V_RETURN || 'q';
ELSIF V_COMPARE >= F_NLSSORT('亽 ') AND V_COMPARE <= F_NLSSORT('鶸 ') THEN
V_RETURN := V_RETURN || 'r';
ELSIF V_COMPARE >= F_NLSSORT('仨 ') AND V_COMPARE <= F_NLSSORT('蜶 ') THEN
V_RETURN := V_RETURN || 's';
ELSIF V_COMPARE >= F_NLSSORT('侤 ') AND V_COMPARE <= F_NLSSORT('籜 ') THEN
V_RETURN := V_RETURN || 't';
ELSIF V_COMPARE >= F_NLSSORT('屲 ') AND V_COMPARE <= F_NLSSORT('鶩 ') THEN
V_RETURN := V_RETURN || 'w';
ELSIF V_COMPARE >= F_NLSSORT('夕 ') AND V_COMPARE <= F_NLSSORT('鑂 ') THEN
V_RETURN := V_RETURN || 'x';
ELSIF V_COMPARE >= F_NLSSORT('丫 ') AND V_COMPARE <= F_NLSSORT('韻 ') THEN
V_RETURN := V_RETURN || 'y';
ELSIF V_COMPARE >= F_NLSSORT('帀 ') AND V_COMPARE <= F_NLSSORT('咗 ') THEN
V_RETURN := V_RETURN || 'z';
END IF;
END LOOP;
RETURN V_RETURN;
END;

测试一下:
SELECT F_TRANS_PINYIN_CAPITAL('罗华') FROM DUAL  
返回 lh
使用的时候这样查询:
select name from users t1 where (t1.name = ? or F_TRANS_PINYIN_CAPITAL(t1.name) = ?)
如果里面的?参数传递的是“罗华”,就是查询用户名是落花的人,如果传递的是lh的话,查询的就是拼音是lh的人 查看全部

/*------增加:yl--*/
oracle 中 NLSSORT函数的用法

NLSSORT(),用来进行语言排序

拼音
SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_PINYIN_M')
笔划
SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_STROKE_M')
部首
SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_RADICAL_M')
/*------增加:yl end--*/

列表一行汉字
WITH A AS
(SELECT '获取汉字拼音首字母' W FROM DUAL)
SELECT SUBSTR(W, ROWNUM, 1) FROM A
CONNECT BY ROWNUM <= (SELECT LENGTH(W) FROM A);
返回结果










用汉字字符集对这个列表进行排序
WITH A AS
(SELECT '获取汉字拼音首字母' W FROM DUAL)
SELECT SUBSTR(W, ROWNUM, 1) FROM A
CONNECT BY ROWNUM <= (SELECT LENGTH(W) FROM A)
ORDER BY NLSSORT(SUBSTR(W, ROWNUM, 1), 'NLS_SORT=SCHINESE_PINYIN_M');
返回结果










那么根据这个原理,上面输入一个拼音A打头的字"澳",后面输入一个B大头的字"吧",找到每个音节的起止的汉字是哪个
WITH A AS
(
SELECT ROWNUM RN, CHR(ROWNUM) C FROM DUAL CONNECT BY LEVEL <= 65535
)
SELECT * FROM A WHERE LENGTHB(C) = 2
AND RN > 32768
AND NLSSORT(C, 'NLS_SORT=SCHINESE_PINYIN_M') > NLSSORT('澳', 'NLS_SORT=SCHINESE_PINYIN_M')
AND NLSSORT(C, 'NLS_SORT=SCHINESE_PINYIN_M') < NLSSORT('吧', 'NLS_SORT=SCHINESE_PINYIN_M')
ORDER BY NLSSORT(C, 'NLS_SORT=SCHINESE_PINYIN_M');
根据返回的结果,就能看到,A的结束和B的开始的汉子分别是:“驁” “八”,依次类推可以找到其他的分界点,那么最后的函数就是如下:

CREATE OR REPLACE FUNCTION F_TRANS_PINYIN_CAPITAL(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS
V_COMPARE VARCHAR2(100);
V_RETURN VARCHAR2(4000);

FUNCTION F_NLSSORT(P_WORD IN VARCHAR2) RETURN VARCHAR2 AS
BEGIN
RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M');
END;
BEGIN
FOR I IN 1..LENGTH(P_NAME) LOOP
V_COMPARE := F_NLSSORT(SUBSTR(P_NAME, I, 1));
IF V_COMPARE >= F_NLSSORT(' 吖 ') AND V_COMPARE <= F_NLSSORT('驁 ') THEN
V_RETURN := V_RETURN || 'a';
ELSIF V_COMPARE >= F_NLSSORT('八 ') AND V_COMPARE <= F_NLSSORT('簿 ') THEN
V_RETURN := V_RETURN || 'b';
ELSIF V_COMPARE >= F_NLSSORT('嚓 ') AND V_COMPARE <= F_NLSSORT('錯 ') THEN
V_RETURN := V_RETURN || 'c';
ELSIF V_COMPARE >= F_NLSSORT('咑 ') AND V_COMPARE <= F_NLSSORT('鵽 ') THEN
V_RETURN := V_RETURN || 'd';
ELSIF V_COMPARE >= F_NLSSORT('妸 ') AND V_COMPARE <= F_NLSSORT('樲 ') THEN
V_RETURN := V_RETURN || 'e';
ELSIF V_COMPARE >= F_NLSSORT('发 ') AND V_COMPARE <= F_NLSSORT('猤 ') THEN
V_RETURN := V_RETURN || 'f';
ELSIF V_COMPARE >= F_NLSSORT('旮 ') AND V_COMPARE <= F_NLSSORT('腂 ') THEN
V_RETURN := V_RETURN || 'g';
ELSIF V_COMPARE >= F_NLSSORT('妎 ') AND V_COMPARE <= F_NLSSORT('夻 ') THEN
V_RETURN := V_RETURN || 'h';
ELSIF V_COMPARE >= F_NLSSORT('丌 ') AND V_COMPARE <= F_NLSSORT('攈 ') THEN
V_RETURN := V_RETURN || 'j';
ELSIF V_COMPARE >= F_NLSSORT('咔 ') AND V_COMPARE <= F_NLSSORT('穒 ') THEN
V_RETURN := V_RETURN || 'k';
ELSIF V_COMPARE >= F_NLSSORT('垃 ') AND V_COMPARE <= F_NLSSORT('擽 ') THEN
V_RETURN := V_RETURN || 'l';
ELSIF V_COMPARE >= F_NLSSORT('嘸 ') AND V_COMPARE <= F_NLSSORT('椧 ') THEN
V_RETURN := V_RETURN || 'm';
ELSIF V_COMPARE >= F_NLSSORT('拏 ') AND V_COMPARE <= F_NLSSORT('瘧 ') THEN
V_RETURN := V_RETURN || 'n';
ELSIF V_COMPARE >= F_NLSSORT('筽 ') AND V_COMPARE <= F_NLSSORT('漚 ') THEN
V_RETURN := V_RETURN || 'o';
ELSIF V_COMPARE >= F_NLSSORT('妑 ') AND V_COMPARE <= F_NLSSORT('曝 ') THEN
V_RETURN := V_RETURN || 'p';
ELSIF V_COMPARE >= F_NLSSORT('七 ') AND V_COMPARE <= F_NLSSORT('裠 ') THEN
V_RETURN := V_RETURN || 'q';
ELSIF V_COMPARE >= F_NLSSORT('亽 ') AND V_COMPARE <= F_NLSSORT('鶸 ') THEN
V_RETURN := V_RETURN || 'r';
ELSIF V_COMPARE >= F_NLSSORT('仨 ') AND V_COMPARE <= F_NLSSORT('蜶 ') THEN
V_RETURN := V_RETURN || 's';
ELSIF V_COMPARE >= F_NLSSORT('侤 ') AND V_COMPARE <= F_NLSSORT('籜 ') THEN
V_RETURN := V_RETURN || 't';
ELSIF V_COMPARE >= F_NLSSORT('屲 ') AND V_COMPARE <= F_NLSSORT('鶩 ') THEN
V_RETURN := V_RETURN || 'w';
ELSIF V_COMPARE >= F_NLSSORT('夕 ') AND V_COMPARE <= F_NLSSORT('鑂 ') THEN
V_RETURN := V_RETURN || 'x';
ELSIF V_COMPARE >= F_NLSSORT('丫 ') AND V_COMPARE <= F_NLSSORT('韻 ') THEN
V_RETURN := V_RETURN || 'y';
ELSIF V_COMPARE >= F_NLSSORT('帀 ') AND V_COMPARE <= F_NLSSORT('咗 ') THEN
V_RETURN := V_RETURN || 'z';
END IF;
END LOOP;
RETURN V_RETURN;
END;

测试一下:
SELECT F_TRANS_PINYIN_CAPITAL('罗华') FROM DUAL  
返回 lh
使用的时候这样查询:
select name from users t1 where (t1.name = ? or F_TRANS_PINYIN_CAPITAL(t1.name) = ?)
如果里面的?参数传递的是“罗华”,就是查询用户名是落花的人,如果传递的是lh的话,查询的就是拼音是lh的人

老人与海TXT

默认分类admin 发表了文章 • 0 个评论 • 39 次浏览 • 2018-04-07 22:40 • 来自相关话题

中英文对照
中英文对照

幽默笑话:老板刚进办公室,部门经理的老婆闯进来

回复

默认分类匿名用户 发起了问题 • 1 人关注 • 0 个回复 • 64 次浏览 • 2018-04-05 23:12 • 来自相关话题

https://www.yiiframework.com/

默认分类admin 发表了文章 • 0 个评论 • 76 次浏览 • 2018-03-26 15:58 • 来自相关话题

https://www.yiiframework.com/

route命令详解与使用实例

测试分类admin 发表了文章 • 0 个评论 • 65 次浏览 • 2018-04-03 10:53 • 来自相关话题

1.   使用背景
需要接入两个网络,一个是部署环境所在内网环境,这个环境是上不了外网, 外网环境很可能是一个无线网络。如果两者都连接上,很可能导致有一方不能起作用,即外网或内网上不了,常常需要使用繁琐的“禁用网络连接”、“启用网络连接”的操作来进行内外网的切换,甚是麻烦。
为了解决这个问题,可以使用route命令来使得同时内外网都可用。
2.   route命令
route命令是在本地 IP 路由表中显示和修改条目网络命令。
route命令的语法如下:
route [-f] [-p] [Command [Destination] [mask Netmask] [Gateway] [metric Metric]] [if Interface]]
route命令常用的命令如下:
1)route delete:删除路由;
2)route print:打印路由的Destination;
3)route add:添加路由;
4)route change:更改现存路由。
一般使用route delete、route add、route print这三条命令可解决路由的所有功能。
2.1 打印路由信息
       打印路由信息使用命令:route print。
===========================================================================
Interface List
0x1  MS TCP Loopback interface
0x2 00 26 18 31 4f d1  Realtek RTL8168C(P)/8111C(P) PCI-E Gigabit Ether
net NIC - 数据包计划程序微型端口
0x50004 00 53 45 00 00 00  WAN (PPP/SLIP) Interface
===========================================================================
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface Metric
          0.0.0.0          0.0.0.0   116.69.106.119 116.69.106.119       1
          0.0.0.0          0.0.0.0    192.168.2.226    192.168.2.79       20
    115.168.64.94 255.255.255.255   116.69.106.119 116.69.106.119       1
   116.69.106.119 255.255.255.255        127.0.0.1       127.0.0.1       50
 116.255.255.255 255.255.255.255   116.69.106.119 116.69.106.119       50
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.2.0    255.255.255.0     192.168.2.79    192.168.2.79       20
     192.168.2.79 255.255.255.255        127.0.0.1       127.0.0.1       20
    192.168.2.255 255.255.255.255     192.168.2.79    192.168.2.79       20
        224.0.0.0        240.0.0.0     192.168.2.79    192.168.2.79       20
        224.0.0.0        240.0.0.0   116.69.106.119 116.69.106.119       1
 255.255.255.255 255.255.255.255   116.69.106.119 116.69.106.119       1
 255.255.255.255 255.255.255.255     192.168.2.79    192.168.2.79       1
Default Gateway:    116.69.106.119
===========================================================================
Persistent Routes:
 None
第一列是网络目的地址。列出了路由器连接的所有的网段。
第二行网络掩码列提供这个网段本身的子网掩码,而不是连接到这个网段的网卡的子网掩码。这基本上能够让路由器确定目的网络的地址类。
第三列是网关。一旦路由器确定它要把这个数据包转发到哪一个目的网络,路由器就要查看网关列表。网关表告诉路由器这个数据包应该转发到哪一个IP地址才能达到目的网络。
第四列接口列告诉路由器哪一个网卡连接到了合适的目的网络。从技术上说,接口列仅告诉路由器分配给网卡的IP地址。那个网卡把路由器连接到目的网络。然而,路由器很聪明,知道这个地址绑定到哪一个物理网卡。
第五列是测量。测量本身是一种科学。该值越小的,可信度越高
下面说说每一行内容代表的内容:
Network Destination      Netmask          Gateway         Interface      Metric  
0.0.0.0                    0.0.0.0          116.69.106.119  116.69.106.119      1  
   这表示发向任意网段的数据通过本机接口116.69.106.119被送往一个默认的网关:116.69.106.119,它的管理距离是1,管理距离指的是在路径选择的过程中信息的可信度,管理距离越小的,可信度越高。
第二行的内容:
Network Destination      Netmask          Gateway         Interface      Metric  
0.0.0.0                    0.0.0.0          192.168.2.226  192.168.2.79      20
   这表示发向任意网段的数据通过本机接口192.168.2.79被送往网关192.168.2.226,但是因为该行的管理距离(Metric)比第一行大,即表示第二行的可信度没有第一行高,所以在默认情况下会优先选择第一行的网关出去。
第三行的内容:
Network Destination      Netmask          Gateway         Interface          Metric  
115.168.64.94           255.255.255.255    116.69.106.119 116.69.106.119       1
第四行的内容:
Network Destination      Netmask          Gateway         Interface          Metric  
116.69.106.119          255.255.255.255    127.0.0.1        127.0.0.1             50
      表示从自己的主机发送到自己主机的数据包,如果使用的是自己主机的IP地址,跟使用回环地址效果相同,通过同样的途径被路由,也就是如果我有自己的站点,我要浏览自己的站点,在IE地质栏里面输入localhost与116.69.106.119是一样的,尽管localhost被解析为 127.0.0.1。 
 第五行的内容:
Network Destination      Netmask          Gateway         Interface          Metric  
116.255.255.255          255.255.255.255    116.69.106.119 116.69.106.119       50
   这里的目的地址是一个局域广播地址,系统对这样的数据包的处理方法是把本机116..69.106.119作为网关,发送局域广播帧,这个帧将被路由器过滤。 
第六行的内容:
Network Destination      Netmask          Gateway         Interface          Metric  
127.0.0.0                   255.0.0.0          127.0.0.1       127.0.0.1           1
2.2 删除路由信息
所用的命令为:
route delete 网络目的地址 [mask] [子网掩码]
   例如想要删除网络目的地址为192.168.2.0,子网掩码为255.255.255.0的路由,可用:
route delete 192.168.2.0 mask 255.255.0.0
    删除路由时还可以用模糊匹配,例如要删除以115开头的IP路由表中的所有路由时,可用:
route delete 115*
2.3 添加路由信息
       添加路由信息使用如下命令:
route add 网络目的地址 mask 子网掩码网关 [metric] [测量值]
   例如若要向带有255.255.0.0子网掩码、10.27.0.1网关,测量值为7的10.41.0.0的目标地址添加一条路由,可使用如下命令:
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 metric 7
3.   应用实例
以调试环境为例,需要接入内网进行调试,内网地址为5.0.217.47。另外接了个无线,可以上外网自动分配了个192.168.2.110。
插上内网网线,并成功连接上外网后,此时内网是通的,但是外网连接不上。在命令窗口使用ipconfig和route print命令可以打印出当前的信息:
route print
===========================================================================
Interface List
0x1  MS TCP Loopback interface
0x2 00 26 18 31 4f d1  Realtek RTL8168C(P)/8111C(P) PCI-E Gigabit Ether
net NIC - 数据包计划程序微型端口
0x3 00 24 2c e7 57 11  Atheros AR5006X Wireless Network Adapter - 数据
包计划程序微型端口
===========================================================================
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface Metric
          0.0.0.0          0.0.0.0        5.0.217.1      5.0.217.47       10
          0.0.0.0          0.0.0.0      192.168.1.1   192.168.1.110       25
        5.0.217.0 255.255.255.192       5.0.217.47      5.0.217.47       10
       5.0.217.47 255.255.255.255        127.0.0.1       127.0.0.1       10
    5.255.255.255 255.255.255.255       5.0.217.47      5.0.217.47       10
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.1.0    255.255.255.0    192.168.1.110   192.168.1.110       25
    192.168.1.110 255.255.255.255        127.0.0.1       127.0.0.1       25
    192.168.1.255 255.255.255.255    192.168.1.110   192.168.1.110       25
        224.0.0.0        240.0.0.0       5.0.217.47      5.0.217.47       10
        224.0.0.0        240.0.0.0    192.168.1.110   192.168.1.110       25
 255.255.255.255 255.255.255.255       5.0.217.47      5.0.217.47       1
 255.255.255.255 255.255.255.255    192.168.1.110   192.168.1.110       1
Default Gateway:       192.168.1.1
===========================================================================
Persistent Routes:
 None
ipconfig
Windows IP Configuration
Ethernet adapter 本地连接:
        Connection-specific DNS Suffix . :
        IP Address. . . . . . . . . . . . : 5.0.217.47
        Subnet Mask . . . . . . . . . . . : 255.255.255.192
        Default Gateway . . . . . . . . . :
Ethernet adapter 无线网络连接:
        Connection-specific DNS Suffix . :
        IP Address. . . . . . . . . . . . : 192.168.1.110
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.1.1
由route print命令的结果的第一行可以看到,只所以访问不到外网,是因为默认的情况是通过5.0.217.1的内网的网关出去的。
为了达到能同时访问内外网的需求,只需要删除掉0.0.0.0的路由后,添加两条路由即可,将5开头的地址都通过5.0.217.1网关路由出去,而其余的地址都通过无线的网关192.168.1.110出去。参考如下:
route delete 0.0.0.0
route add 0.0.0.0 mask 0.0.0.0 192.168.1.1
route add 5.0.0.0 mask 255.0.0.0 5.0.217.1
此时运行route print命令,可看到运行结果如下:
route print
===========================================================================
Interface List
0x1  MS TCP Loopback interface
0x2 00 26 18 31 4f d1  Realtek RTL8168C(P)/8111C(P) PCI-E Gigabit Ether
net NIC - 数据包计划程序微型端口
0x3 00 24 2c e7 57 11  Atheros AR5006X Wireless Network Adapter - 数据
包计划程序微型端口
===========================================================================
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface Metric
          0.0.0.0          0.0.0.0      192.168.1.1   192.168.1.110       1
          5.0.0.0        255.0.0.0        5.0.217.1      5.0.217.47       1
        5.0.217.0 255.255.255.192       5.0.217.47      5.0.217.47       10
       5.0.217.47 255.255.255.255        127.0.0.1       127.0.0.1       10
    5.255.255.255 255.255.255.255       5.0.217.47      5.0.217.47       10
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.1.0    255.255.255.0    192.168.1.110   192.168.1.110       25
    192.168.1.110 255.255.255.255        127.0.0.1       127.0.0.1       25
    192.168.1.255 255.255.255.255    192.168.1.110   192.168.1.110       25
        224.0.0.0        240.0.0.0       5.0.217.47      5.0.217.47       10
        224.0.0.0        240.0.0.0    192.168.1.110   192.168.1.110       25
 255.255.255.255 255.255.255.255       5.0.217.47      5.0.217.47       1
 255.255.255.255 255.255.255.255    192.168.1.110   192.168.1.110       1
Default Gateway:       192.168.1.1
===========================================================================
Persistent Routes:
 None
   可看到默认是通过无线的192.168.1.110出去的,此时内外网都可以同时用了
  查看全部
1.   使用背景
需要接入两个网络,一个是部署环境所在内网环境,这个环境是上不了外网, 外网环境很可能是一个无线网络。如果两者都连接上,很可能导致有一方不能起作用,即外网或内网上不了,常常需要使用繁琐的“禁用网络连接”、“启用网络连接”的操作来进行内外网的切换,甚是麻烦。
为了解决这个问题,可以使用route命令来使得同时内外网都可用。
2.   route命令
route命令是在本地 IP 路由表中显示和修改条目网络命令。
route命令的语法如下:
route [-f] [-p] [Command [Destination] [mask Netmask] [Gateway] [metric Metric]] [if Interface]]
route命令常用的命令如下:
1)route delete:删除路由;
2)route print:打印路由的Destination;
3)route add:添加路由;
4)route change:更改现存路由。
一般使用route delete、route add、route print这三条命令可解决路由的所有功能。
2.1 打印路由信息
       打印路由信息使用命令:route print。
===========================================================================
Interface List
0x1  MS TCP Loopback interface
0x2 00 26 18 31 4f d1  Realtek RTL8168C(P)/8111C(P) PCI-E Gigabit Ether
net NIC - 数据包计划程序微型端口
0x50004 00 53 45 00 00 00  WAN (PPP/SLIP) Interface
===========================================================================
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface Metric
          0.0.0.0          0.0.0.0   116.69.106.119 116.69.106.119       1
          0.0.0.0          0.0.0.0    192.168.2.226    192.168.2.79       20
    115.168.64.94 255.255.255.255   116.69.106.119 116.69.106.119       1
   116.69.106.119 255.255.255.255        127.0.0.1       127.0.0.1       50
 116.255.255.255 255.255.255.255   116.69.106.119 116.69.106.119       50
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.2.0    255.255.255.0     192.168.2.79    192.168.2.79       20
     192.168.2.79 255.255.255.255        127.0.0.1       127.0.0.1       20
    192.168.2.255 255.255.255.255     192.168.2.79    192.168.2.79       20
        224.0.0.0        240.0.0.0     192.168.2.79    192.168.2.79       20
        224.0.0.0        240.0.0.0   116.69.106.119 116.69.106.119       1
 255.255.255.255 255.255.255.255   116.69.106.119 116.69.106.119       1
 255.255.255.255 255.255.255.255     192.168.2.79    192.168.2.79       1
Default Gateway:    116.69.106.119
===========================================================================
Persistent Routes:
 None
第一列是网络目的地址。列出了路由器连接的所有的网段。
第二行网络掩码列提供这个网段本身的子网掩码,而不是连接到这个网段的网卡的子网掩码。这基本上能够让路由器确定目的网络的地址类。
第三列是网关。一旦路由器确定它要把这个数据包转发到哪一个目的网络,路由器就要查看网关列表。网关表告诉路由器这个数据包应该转发到哪一个IP地址才能达到目的网络。
第四列接口列告诉路由器哪一个网卡连接到了合适的目的网络。从技术上说,接口列仅告诉路由器分配给网卡的IP地址。那个网卡把路由器连接到目的网络。然而,路由器很聪明,知道这个地址绑定到哪一个物理网卡。
第五列是测量。测量本身是一种科学。该值越小的,可信度越高
下面说说每一行内容代表的内容:
Network Destination      Netmask          Gateway         Interface      Metric  
0.0.0.0                    0.0.0.0          116.69.106.119  116.69.106.119      1  
   这表示发向任意网段的数据通过本机接口116.69.106.119被送往一个默认的网关:116.69.106.119,它的管理距离是1,管理距离指的是在路径选择的过程中信息的可信度,管理距离越小的,可信度越高。
第二行的内容:
Network Destination      Netmask          Gateway         Interface      Metric  
0.0.0.0                    0.0.0.0          192.168.2.226  192.168.2.79      20
   这表示发向任意网段的数据通过本机接口192.168.2.79被送往网关192.168.2.226,但是因为该行的管理距离(Metric)比第一行大,即表示第二行的可信度没有第一行高,所以在默认情况下会优先选择第一行的网关出去。
第三行的内容:
Network Destination      Netmask          Gateway         Interface          Metric  
115.168.64.94           255.255.255.255    116.69.106.119 116.69.106.119       1
第四行的内容:
Network Destination      Netmask          Gateway         Interface          Metric  
116.69.106.119          255.255.255.255    127.0.0.1        127.0.0.1             50
      表示从自己的主机发送到自己主机的数据包,如果使用的是自己主机的IP地址,跟使用回环地址效果相同,通过同样的途径被路由,也就是如果我有自己的站点,我要浏览自己的站点,在IE地质栏里面输入localhost与116.69.106.119是一样的,尽管localhost被解析为 127.0.0.1。 
 第五行的内容:
Network Destination      Netmask          Gateway         Interface          Metric  
116.255.255.255          255.255.255.255    116.69.106.119 116.69.106.119       50
   这里的目的地址是一个局域广播地址,系统对这样的数据包的处理方法是把本机116..69.106.119作为网关,发送局域广播帧,这个帧将被路由器过滤。 
第六行的内容:
Network Destination      Netmask          Gateway         Interface          Metric  
127.0.0.0                   255.0.0.0          127.0.0.1       127.0.0.1           1
2.2 删除路由信息
所用的命令为:
route delete 网络目的地址 [mask] [子网掩码]
   例如想要删除网络目的地址为192.168.2.0,子网掩码为255.255.255.0的路由,可用:
route delete 192.168.2.0 mask 255.255.0.0
    删除路由时还可以用模糊匹配,例如要删除以115开头的IP路由表中的所有路由时,可用:
route delete 115*
2.3 添加路由信息
       添加路由信息使用如下命令:
route add 网络目的地址 mask 子网掩码网关 [metric] [测量值]
   例如若要向带有255.255.0.0子网掩码、10.27.0.1网关,测量值为7的10.41.0.0的目标地址添加一条路由,可使用如下命令:
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 metric 7
3.   应用实例
以调试环境为例,需要接入内网进行调试,内网地址为5.0.217.47。另外接了个无线,可以上外网自动分配了个192.168.2.110。
插上内网网线,并成功连接上外网后,此时内网是通的,但是外网连接不上。在命令窗口使用ipconfig和route print命令可以打印出当前的信息:
route print
===========================================================================
Interface List
0x1  MS TCP Loopback interface
0x2 00 26 18 31 4f d1  Realtek RTL8168C(P)/8111C(P) PCI-E Gigabit Ether
net NIC - 数据包计划程序微型端口
0x3 00 24 2c e7 57 11  Atheros AR5006X Wireless Network Adapter - 数据
包计划程序微型端口
===========================================================================
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface Metric
          0.0.0.0          0.0.0.0        5.0.217.1      5.0.217.47       10
          0.0.0.0          0.0.0.0      192.168.1.1   192.168.1.110       25
        5.0.217.0 255.255.255.192       5.0.217.47      5.0.217.47       10
       5.0.217.47 255.255.255.255        127.0.0.1       127.0.0.1       10
    5.255.255.255 255.255.255.255       5.0.217.47      5.0.217.47       10
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.1.0    255.255.255.0    192.168.1.110   192.168.1.110       25
    192.168.1.110 255.255.255.255        127.0.0.1       127.0.0.1       25
    192.168.1.255 255.255.255.255    192.168.1.110   192.168.1.110       25
        224.0.0.0        240.0.0.0       5.0.217.47      5.0.217.47       10
        224.0.0.0        240.0.0.0    192.168.1.110   192.168.1.110       25
 255.255.255.255 255.255.255.255       5.0.217.47      5.0.217.47       1
 255.255.255.255 255.255.255.255    192.168.1.110   192.168.1.110       1
Default Gateway:       192.168.1.1
===========================================================================
Persistent Routes:
 None
ipconfig
Windows IP Configuration
Ethernet adapter 本地连接:
        Connection-specific DNS Suffix . :
        IP Address. . . . . . . . . . . . : 5.0.217.47
        Subnet Mask . . . . . . . . . . . : 255.255.255.192
        Default Gateway . . . . . . . . . :
Ethernet adapter 无线网络连接:
        Connection-specific DNS Suffix . :
        IP Address. . . . . . . . . . . . : 192.168.1.110
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.1.1
由route print命令的结果的第一行可以看到,只所以访问不到外网,是因为默认的情况是通过5.0.217.1的内网的网关出去的。
为了达到能同时访问内外网的需求,只需要删除掉0.0.0.0的路由后,添加两条路由即可,将5开头的地址都通过5.0.217.1网关路由出去,而其余的地址都通过无线的网关192.168.1.110出去。参考如下:
route delete 0.0.0.0
route add 0.0.0.0 mask 0.0.0.0 192.168.1.1
route add 5.0.0.0 mask 255.0.0.0 5.0.217.1
此时运行route print命令,可看到运行结果如下:
route print
===========================================================================
Interface List
0x1  MS TCP Loopback interface
0x2 00 26 18 31 4f d1  Realtek RTL8168C(P)/8111C(P) PCI-E Gigabit Ether
net NIC - 数据包计划程序微型端口
0x3 00 24 2c e7 57 11  Atheros AR5006X Wireless Network Adapter - 数据
包计划程序微型端口
===========================================================================
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface Metric
          0.0.0.0          0.0.0.0      192.168.1.1   192.168.1.110       1
          5.0.0.0        255.0.0.0        5.0.217.1      5.0.217.47       1
        5.0.217.0 255.255.255.192       5.0.217.47      5.0.217.47       10
       5.0.217.47 255.255.255.255        127.0.0.1       127.0.0.1       10
    5.255.255.255 255.255.255.255       5.0.217.47      5.0.217.47       10
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.1.0    255.255.255.0    192.168.1.110   192.168.1.110       25
    192.168.1.110 255.255.255.255        127.0.0.1       127.0.0.1       25
    192.168.1.255 255.255.255.255    192.168.1.110   192.168.1.110       25
        224.0.0.0        240.0.0.0       5.0.217.47      5.0.217.47       10
        224.0.0.0        240.0.0.0    192.168.1.110   192.168.1.110       25
 255.255.255.255 255.255.255.255       5.0.217.47      5.0.217.47       1
 255.255.255.255 255.255.255.255    192.168.1.110   192.168.1.110       1
Default Gateway:       192.168.1.1
===========================================================================
Persistent Routes:
 None
   可看到默认是通过无线的192.168.1.110出去的,此时内外网都可以同时用了
 

《通勤营救》

默认分类admin 发表了文章 • 0 个评论 • 79 次浏览 • 2018-03-31 23:56 • 来自相关话题

《通勤营救》:一个关于上下班路上的杀身之祸幻想!

杨不易百家号03-3009:41一个普通的上班族,每天坐公交或地铁,往来于公司和家之间。如此平淡的日子里,有没有想过路上遇上什么惊恐的事?比如我经常猜想地铁穿越黑暗之时,暗地里其实有怪兽蠢蠢欲动……

这脑洞开大了,也是通勤路上的无聊。而电影《通勤营救》将于30日上映,讲的就是一个保险员,在通勤路上卷入了一场犯罪阴谋中,不仅威胁着他的生命,也威胁着他身边人的生命。他能否从这辆“恐怖列车”中逃脱?背后到底藏着什么阴谋?列车在加速,真相又在哪里?不是什么超级英雄,只是一个,如你我一般普通的上班族……

这部电影的导演是西班牙人佐米希尔拉,曾导演过《空中营救》和《鲨滩》。《鲨滩》可以说是《大白鲨》之后最好的鲨鱼恐怖片,一个美女撑起整部电影,让人从片头惊吓到片尾。

《通勤营救》男主角 迈克麦考利由连姆尼森饰演,女主角乔安娜由维拉法梅加饰演。迈克麦考利曾出演《辛德勒的名单》,《飓风营救》《星战前传》、《纽约黑帮》、《真爱至上》等影片,曾获威尼斯电影节最佳男主角称号。

维拉法梅加曾出演著名的《在云端》,因此获得多项电影大奖提名。所以,《通勤营救》还是值得期待的。

这部电影已经于2018年1月在美国上映,获得相对较好的评价。目前豆瓣电影6.8分。相信在中国内地上映之后,将会得到更多中国影迷的评价。

生活很平淡,两点一线的上下班通勤之路,也很无聊。这部电影,或许可以给我们的生活带来一点脑洞大开的玩乐。其实电影就是梦境,有时候,这个梦境离我们的生活很近,所以就有别样的滋味吧。 查看全部
《通勤营救》:一个关于上下班路上的杀身之祸幻想!

杨不易百家号03-3009:41一个普通的上班族,每天坐公交或地铁,往来于公司和家之间。如此平淡的日子里,有没有想过路上遇上什么惊恐的事?比如我经常猜想地铁穿越黑暗之时,暗地里其实有怪兽蠢蠢欲动……

这脑洞开大了,也是通勤路上的无聊。而电影《通勤营救》将于30日上映,讲的就是一个保险员,在通勤路上卷入了一场犯罪阴谋中,不仅威胁着他的生命,也威胁着他身边人的生命。他能否从这辆“恐怖列车”中逃脱?背后到底藏着什么阴谋?列车在加速,真相又在哪里?不是什么超级英雄,只是一个,如你我一般普通的上班族……

这部电影的导演是西班牙人佐米希尔拉,曾导演过《空中营救》和《鲨滩》。《鲨滩》可以说是《大白鲨》之后最好的鲨鱼恐怖片,一个美女撑起整部电影,让人从片头惊吓到片尾。

《通勤营救》男主角 迈克麦考利由连姆尼森饰演,女主角乔安娜由维拉法梅加饰演。迈克麦考利曾出演《辛德勒的名单》,《飓风营救》《星战前传》、《纽约黑帮》、《真爱至上》等影片,曾获威尼斯电影节最佳男主角称号。

维拉法梅加曾出演著名的《在云端》,因此获得多项电影大奖提名。所以,《通勤营救》还是值得期待的。

这部电影已经于2018年1月在美国上映,获得相对较好的评价。目前豆瓣电影6.8分。相信在中国内地上映之后,将会得到更多中国影迷的评价。

生活很平淡,两点一线的上下班通勤之路,也很无聊。这部电影,或许可以给我们的生活带来一点脑洞大开的玩乐。其实电影就是梦境,有时候,这个梦境离我们的生活很近,所以就有别样的滋味吧。

ADOBE CS5.5注册机

默认分类admin 发表了文章 • 0 个评论 • 89 次浏览 • 2018-03-30 21:40 • 来自相关话题