﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-c++的海洋很宽，但我喜欢在里面划船！</title><link>http://www.cppblog.com/tzhappyrose/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 04 Apr 2026 20:28:31 GMT</lastBuildDate><pubDate>Sat, 04 Apr 2026 20:28:31 GMT</pubDate><ttl>60</ttl><item><title>switch 与if else</title><link>http://www.cppblog.com/tzhappyrose/archive/2009/10/14/98625.html</link><dc:creator>星星点灯</dc:creator><author>星星点灯</author><pubDate>Wed, 14 Oct 2009 13:04:00 GMT</pubDate><guid>http://www.cppblog.com/tzhappyrose/archive/2009/10/14/98625.html</guid><wfw:comment>http://www.cppblog.com/tzhappyrose/comments/98625.html</wfw:comment><comments>http://www.cppblog.com/tzhappyrose/archive/2009/10/14/98625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tzhappyrose/comments/commentRss/98625.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tzhappyrose/services/trackbacks/98625.html</trackback:ping><description><![CDATA[<p>今天对于老师讲的一个问题。始终有点疑惑<br>一个对于 switch与 if else的问题。<br>switch 比if else的执行效率高。感觉可能是因为switch 执行不向 if else 需要顺序执行。但是他也有限制，就是 swtich 与case的每个标签必须是整形（包括字符型）的。所有对于 浮点型或是选择涉及到取值范围，就无法处理了。。。<br><br>比如一道简单的题目：<br>&nbsp;假设 a，x为整形；<br>&nbsp; a&gt;10&nbsp;&nbsp; x=1;<br>&nbsp;5&lt;=a&lt;=10, x=2;<br>&nbsp; 0&lt;=a &lt;5,X=3;<br>&nbsp; a&lt;0, x=4;<br><br></p>
if(a&gt;10)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x=1;<br>else<br>&nbsp;&nbsp;&nbsp; if (a&gt;=5)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x=2;<br>&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(a&gt;=0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x=3;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x=4;<br><br><br>这种选择分支是不是一定无法转为 switch case 结构呢？<br>我觉得是。。。。<br><br><br>
<img src ="http://www.cppblog.com/tzhappyrose/aggbug/98625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tzhappyrose/" target="_blank">星星点灯</a> 2009-10-14 21:04 <a href="http://www.cppblog.com/tzhappyrose/archive/2009/10/14/98625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql 语句 创建数据库</title><link>http://www.cppblog.com/tzhappyrose/archive/2009/10/09/98189.html</link><dc:creator>星星点灯</dc:creator><author>星星点灯</author><pubDate>Fri, 09 Oct 2009 12:27:00 GMT</pubDate><guid>http://www.cppblog.com/tzhappyrose/archive/2009/10/09/98189.html</guid><wfw:comment>http://www.cppblog.com/tzhappyrose/comments/98189.html</wfw:comment><comments>http://www.cppblog.com/tzhappyrose/archive/2009/10/09/98189.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tzhappyrose/comments/commentRss/98189.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tzhappyrose/services/trackbacks/98189.html</trackback:ping><description><![CDATA[<p>今天就是学到一点sql 语句；<br><br>创建数据库<br><br>create database basename<br>on primary（<br>数据字段<br>及一些数据库的大小设置<br><br>)<br>&nbsp;log on（）<br><br>collate 排序方式</p>
<img src ="http://www.cppblog.com/tzhappyrose/aggbug/98189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tzhappyrose/" target="_blank">星星点灯</a> 2009-10-09 20:27 <a href="http://www.cppblog.com/tzhappyrose/archive/2009/10/09/98189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL COLLATE ----收藏的文章</title><link>http://www.cppblog.com/tzhappyrose/archive/2009/10/09/98186.html</link><dc:creator>星星点灯</dc:creator><author>星星点灯</author><pubDate>Fri, 09 Oct 2009 11:58:00 GMT</pubDate><guid>http://www.cppblog.com/tzhappyrose/archive/2009/10/09/98186.html</guid><wfw:comment>http://www.cppblog.com/tzhappyrose/comments/98186.html</wfw:comment><comments>http://www.cppblog.com/tzhappyrose/archive/2009/10/09/98186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tzhappyrose/comments/commentRss/98186.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tzhappyrose/services/trackbacks/98186.html</trackback:ping><description><![CDATA[这篇文章出自-----http://hi.baidu.com/hbjinzhao/blog/item/f2c3e919014f0a7cdab4bd94.html<br><br>
<p><font face=宋体 size=3>我们在</font><font size=3>create table</font><font face=宋体 size=3>时经常会碰到这样的语句，例如：</font><font size=3>password nvarchar(10)collate chinese_prc_ci_as null</font><font face=宋体 size=3>，那它到底是什么意思呢？不妨看看下面：</font></p>
<p><font face=宋体 size=3>首先，</font><font size=3>collate</font><font face=宋体 size=3>是一个子句，可应用于数据库定义或列定义以定义排序规则，或应用于字符串表达式以应用排序规则投影。</font></p>
<p><font face=宋体 size=3>语法是</font><font size=3>collate collation_name</font></p>
<p><font size=3>collation_name <font face=宋体>：：</font>={windows_collation_name}|{sql_collation_name}</font></p>
<p><font face=宋体 size=3>参数</font><font size=3>collate_name</font><font face=宋体 size=3>是应用于表达式、列定义或数据库定义的排序规则的名称。</font><font size=3>collation_name</font> <font face=宋体 size=3>可以只是指定的</font> <font size=3>Windows_collation_name</font> <font face=宋体 size=3>或</font> SQL_collation_name<font face=宋体 size=3>。</font></p>
<p><font size=3>Windows_collation_name</font> <font face=宋体 size=3>是</font> <font size=3>Windows</font> <font face=宋体 size=3>排序规则的排序规则名称。参见</font> <font size=3>Windows</font> <font face=宋体 size=3>排序规则名称。</font><font size=3><br>SQL_collation_name</font> <font face=宋体 size=3>是</font> <font size=3>SQL</font> <font face=宋体 size=3>排序规则的排序规则名称。参见</font> <font size=3>SQL</font> <font face=宋体 size=3>排序规则名称。</font></p>
<p><font face=宋体 size=3>下面简单介绍一下</font><font face=宋体 size=3>排序规则：</font></p>
<p><font face=宋体 size=3>什么叫排序规则呢？</font><font size=3>MS</font><font face=宋体 size=3>是这样描述的：</font><font size=3>"</font><font face=宋体 size=3>在</font> <font size=3>Microsoft SQL Server 2000</font> <font face=宋体 size=3>中，</font><font size=3><br></font><font face=宋体 size=3>字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存</font><font size=3><br></font><font face=宋体 size=3>储和比较字符所使用的规则。</font><font size=3>"<br></font><font face=宋体 size=3>　　在查询分析器内执行下面语句，可以得到</font><font size=3>SQL</font><font face=宋体 size=3>　</font><font size=3>SERVER</font><font face=宋体 size=3>支持的所有排序规则。</font></p>
<p><font face=宋体 size=3>　　　　</font><font size=3>select * from ::fn_helpcollations()</font></p>
<p><font face=宋体 size=3>排序规则名称由两部份构成，前半部份是指本排序规则所支持的字符集。</font><font size=3><br></font><font face=宋体 size=3>如：</font><font size=3><br></font><font face=宋体 size=3>　　</font><font size=3>Chinese_PRC_CS_AI_WS<br></font><font face=宋体 size=3>前半部份：指</font><font size=3>UNICODE</font><font face=宋体 size=3>字符集，</font><font size=3>Chinese_PRC_</font><font face=宋体 size=3>指针对大陆简体字</font><font size=3>UNICODE</font><font face=宋体 size=3>的排序规则。</font><font size=3><br></font><font face=宋体 size=3>排序规则的后半部份即后缀</font> <font face=宋体 size=3>含义：</font> <font size=3><br></font><font face=宋体 size=3>　　</font><font size=3>_BIN</font> <font face=宋体 size=3>二进制排序</font> <font size=3><br></font><font face=宋体 size=3>　　</font><font size=3>_CI(CS)</font> <font face=宋体 size=3>是否区分大小写，</font><font size=3>CI</font><font face=宋体 size=3>不区分，</font><font size=3>CS</font><font face=宋体 size=3>区分</font><font size=3><br></font><font face=宋体 size=3>　　</font><font size=3>_AI(AS)</font> <font face=宋体 size=3>是否区分重音，</font><font size=3>AI</font><font face=宋体 size=3>不区分，</font><font size=3>AS</font><font face=宋体 size=3>区分　　　</font><font size=3><br></font><font face=宋体 size=3>　　</font><font size=3>_KI(KS)</font> <font face=宋体 size=3>是否区分假名类型</font><font size=3>,KI</font><font face=宋体 size=3>不区分，</font><font size=3>KS</font><font face=宋体 size=3>区分　</font><font size=3><br>&nbsp;&nbsp;&nbsp;&nbsp; _WI(WS)</font> <font face=宋体 size=3>是否区分宽度</font> <font size=3>WI</font><font face=宋体 size=3>不区分，</font><font size=3>WS</font><font face=宋体 size=3>区分　</font></p>
<p><font face=宋体 size=3>区分大小写</font><font size=3>:</font><font face=宋体 size=3>如果想让比较将大写字母和小写字母视为不等，请选择该选项。</font><font size=3><br></font><font face=宋体 size=3>区分重音</font><font size=3>:</font><font face=宋体 size=3>如果想让比较将重音和非重音字母视为不等，请选择该选项。如果选择该选项，</font><font size=3><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font> <font face=宋体 size=3>比较还将重音不同的字母视为不等。</font><font size=3><br></font><font face=宋体 size=3>区分假名</font><font size=3>:</font><font face=宋体 size=3>如果想让比较将片假名和平假名日语音节视为不等，请选择该选项。</font><font size=3><br></font><font face=宋体 size=3>区分宽度</font><font size=3>:</font><font face=宋体 size=3>如果想让比较将半角字符和全角字符视为不等，请选择该选项</font></p>
<p><font size=3><br></font></p>
<p><font size=3><strong>利用排序规则特点计算汉字笔划和取得拼音首字母</strong><br></font></p>
<p><font size=3>SQL　SERVER的排序规则平时使用不是很多，也许不少初学者还比较陌生，但有<br>一个错误大家应是经常碰到: SQL SERVER数据库，在跨库多表连接查询时，若两数据<br>库默认字符集不同，系统就会返回这样的错误：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;无法解决 equal to 操作的排序规则冲突。&#8221;<br></font></p>
<p><font size=3>一.错误分析：<br>　　这个错误是因为排序规则不一致造成的，我们做个测试，比如：<br>create table #t1(<br>name varchar(20) collate Albanian_CI_AI_WS,&nbsp;&nbsp;<br>value int)</font></p>
<p><font size=3>create table #t2(<br>name varchar(20) collate Chinese_PRC_CI_AI_WS,&nbsp;&nbsp;&nbsp;&nbsp;<br>value int )</font></p>
<p><font size=3>表建好后，执行连接查询：</font></p>
<p><font size=3>select * from #t1 A inner join #t2 B on A.name=B.name</font></p>
<p><font size=3>这样，错误就出现了：</font></p>
<p><font size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 服务器: 消息 446，级别 16，状态 9，行 1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无法解决 equal to 操作的排序规则冲突。<br>　　要排除这个错误，最简单方法是，表连接时指定它的排序规则，这样错误就<br>不再出现了。语句这样写：</font></p>
<p><font size=3>select *<br>from #t1 A inner join #t2 B<br>on A.name=B.name collate Chinese_PRC_CI_AI_WS</font></p>
<p><font size=3><br>二.排序规则简介：</font></p>
<p><font size=3>&nbsp;&nbsp;&nbsp;&nbsp; 什么叫排序规则呢？MS是这样描述的："在 Microsoft SQL Server 2000 中，<br>字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存<br>储和比较字符所使用的规则。"<br>　　在查询分析器内执行下面语句，可以得到SQL　SERVER支持的所有排序规则。</font></p>
<p><font size=3>　　　　select * from ::fn_helpcollations()</font></p>
<p><font size=3>排序规则名称由两部份构成，前半部份是指本排序规则所支持的字符集。<br>如：<br>　　Chinese_PRC_CS_AI_WS<br>前半部份：指UNICODE字符集，Chinese_PRC_指针对大陆简体字UNICODE的排序规则。<br>排序规则的后半部份即后缀 含义：<br>　　_BIN 二进制排序<br>　　_CI(CS) 是否区分大小写，CI不区分，CS区分<br>　　_AI(AS) 是否区分重音，AI不区分，AS区分　　　<br>　　_KI(KS) 是否区分假名类型,KI不区分，KS区分　<br>&nbsp;&nbsp;&nbsp;&nbsp; _WI(WS) 是否区分宽度 WI不区分，WS区分　</font></p>
<p><font size=3>区分大小写:如果想让比较将大写字母和小写字母视为不等，请选择该选项。<br>区分重音:如果想让比较将重音和非重音字母视为不等，请选择该选项。如果选择该选项，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 比较还将重音不同的字母视为不等。<br>区分假名:如果想让比较将片假名和平假名日语音节视为不等，请选择该选项。<br>区分宽度:如果想让比较将半角字符和全角字符视为不等，请选择该选项</font></p>
<p><font size=3><br>三.排序规则的应用：<br>　　SQL SERVER提供了大量的WINDOWS和SQLSERVER专用的排序规则，但它的应用往往<br>被开发人员所忽略。其实它在实践中大有用处。</font></p>
<p><font size=3>　　例1:让表NAME列的内容按拼音排序：</font></p>
<p><font size=3>create table #t(id int,name varchar(20))<br>insert #t select 1,'中'<br>union all select 2,'国'<br>union all select 3,'人'<br>union all select 4,'阿'</font></p>
<p><font size=3>select * from #t order by name collate Chinese_PRC_CS_AS_KS_WS<br>drop table #t<br>/*结果：<br>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>----------- --------------------<br>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 阿<br>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 国<br>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 人<br>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 中<br>*/</font></p>
<p><font size=3>　　例2：让表NAME列的内容按姓氏笔划排序：</font></p>
<p><font size=3>create table #t(id int,name varchar(20))</font></p>
<p><font size=3>insert #t select 1,'三'<br>union all select 2,'乙'<br>union all select 3,'二'<br>union all select 4,'一'<br>union all select 5,'十'<br>select * from #t order by name collate Chinese_PRC_Stroke_CS_AS_KS_WS&nbsp;&nbsp;<br>drop table #t<br>/*结果：<br>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>----------- --------------------<br>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一<br>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 乙<br>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二<br>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 十<br>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 三<br>*/</font></p>
<p><font size=3>四.在实践中排序规则应用的扩展<br>　　SQL SERVER汉字排序规则可以按拼音、笔划等排序，那么我们如何利用这种功能<br>来处理汉字的一些难题呢？我现在举个例子：</font></p>
<p><font size=3>　　　　　　　　　　用排序规则的特性计算汉字笔划</font></p>
<p><font size=3>　　要计算汉字笔划，我们得先做准备工作，我们知道，WINDOWS多国汉字，UNICODE目前<br>收录汉字共20902个。简体GBK码汉字UNICODE值从19968开始。<br>　　首先，我们先用SQLSERVER方法得到所有汉字，不用字典，我们简单利用SQL语句就<br>可以得到：</font></p>
<p><font size=3>select top 20902 code=identity(int,19968,1) into #t from syscolumns a,syscolumns b</font></p>
<p><font size=3>再用以下语句，我们就得到所有汉字，它是按UNICODE值排序的：</font></p>
<p><font size=3>　　select code,nchar(code) as CNWord from #t</font></p>
<p><font size=3>　　然后，我们用SELECT语句，让它按笔划排序。</font></p>
<p><font size=3>select code,nchar(code) as CNWord<br>from #t<br>order by nchar(code) collate Chinese_PRC_Stroke_CS_AS_KS_WS,code</font></p>
<p><font size=3>结果：<br>code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CNWord<br>----------- ------<br>19968&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一<br>20008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 丨<br>20022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 丶<br>20031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 丿<br>20032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 乀<br>20033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 乁<br>20057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 乙<br>20058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 乚<br>20059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 乛<br>20101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 亅<br>19969&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 丁<br>..........</font></p>
<p><font size=3>　&nbsp;&nbsp; 从上面的结果，我们可以清楚的看到，一笔的汉字，code是从19968到20101，从小到大排，但到<br>了二笔汉字的第一个字&#8220;丁&#8221;，CODE为19969，就不按顺序而重新开始了。有了这结果，我们就可以轻<br>松的用SQL语句得到每种笔划汉字归类的第一个或最后一个汉字。<br>下面用语句得到最后一个汉字：</font></p>
<p><font size=3>create table #t1(id int identity,code int,cnword nvarchar(2))</font></p>
<p><font size=3>insert #t1(code,cnword)<br>select code,nchar(code) as CNWord&nbsp;&nbsp; from #t<br>order by nchar(code) collate Chinese_PRC_Stroke_CS_AS_KS_WS,code</font></p>
<p><font size=3><br>select A.cnword<br>from #t1 A<br>left join #t1 B on A.id=B.id-1 and A.code<br>where B.code is null<br>order by A.id<br></font></p>
<p><font size=3>得到36个汉字，每个汉字都是每种笔划数按Chinese_PRC_Stroke_CS_AS_KS_WS排序规则排序后的<br>最后一个汉字：</font></p>
<p><font size=3>亅阝马风龙齐龟齿鸩龀龛龂龆龈龊龍龠龎龐龑龡龢龝齹龣龥齈龞麷鸞麣龖龗齾齉龘</font></p>
<p><font size=3>　　上面可以看出：&#8220;亅&#8221;是所有一笔汉字排序后的最后一个字，&#8220;阝&#8221;是所有二笔汉字排序后的最后<br>一个字......等等。<br>　　但同时也发现，从第33个汉字&#8220;龗(33笔)&#8221;后面的笔划有些乱，不正确。但没关系，比&#8220;龗&#8221;笔划<br>多的只有四个汉字，我们手工加上：齾35笔，齉36笔，靐39笔，龘64笔</font></p>
<p><font size=3>建汉字笔划表（TAB_HZBH）：<br>create table tab_hzbh(id int identity,cnword nchar(1))<br>--先插入前33个汉字<br>insert tab_hzbh<br>select top 33 A.cnword<br>from #t1 A<br>left join #t1 B on A.id=B.id-1 and A.code<br>where B.code is null<br>order by A.id<br>--再加最后四个汉字<br>set identity_insert tab_hzbh on<br>go<br>insert tab_hzbh(id,cnword)<br>　　　　　select 35,N'齾'<br>union all select 36,N'齉'<br>union all select 39,N'靐'<br>union all select 64,N'龘'<br>go<br>set identity_insert tab_hzbh off<br>go<br></font></p>
<p><font size=3>　　到此为止，我们可以得到结果了，比如我们想得到汉字&#8220;国&#8221;的笔划：</font></p>
<p><font size=3>declare @a nchar(1)<br>set @a='国'<br>select top 1 id<br>from&nbsp;&nbsp; tab_hzbh<br>where cnword&gt;=@a collate Chinese_PRC_Stroke_CS_AS_KS_WS<br>order by id</font></p>
<p><font size=3>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>-----------<br>8<br>(结果：汉字&#8220;国&#8221;笔划数为8)</font></p>
<p><font size=3>　　上面所有准备过程，只是为了写下面这个函数，这个函数撇开上面建的所有临时表和固<br>定表，为了通用和代码转移方便，把表tab_hzbh的内容写在语句内，然后计算用户输入一串<br>汉字的总笔划：</font></p>
<p><font size=3>create function fun_getbh(@str nvarchar(4000))<br>returns int<br>as<br>begin<br>declare @word nchar(1),@n int<br>set @n=0<br>while len(@str)&gt;0<br>begin<br>set @word=left(@str,1)<br>--如果非汉字，笔划当0计<br>set @n=@n+(case when unicode(@word) between 19968 and 19968+20901<br>then (select top 1 id from (<br>select 1 as id,N'亅' as word<br>union all select 2,N'阝'<br>union all select 3,N'马'<br>union all select 4,N'风'<br>union all select 5,N'龙'<br>union all select 6,N'齐'<br>union all select 7,N'龟'<br>union all select 8,N'齿'<br>union all select 9,N'鸩'<br>union all select 10,N'龀'<br>union all select 11,N'龛'<br>union all select 12,N'龂'<br>union all select 13,N'龆'<br>union all select 14,N'龈'<br>union all select 15,N'龊'<br>union all select 16,N'龍'<br>union all select 17,N'龠'<br>union all select 18,N'龎'<br>union all select 19,N'龐'<br>union all select 20,N'龑'<br>union all select 21,N'龡'<br>union all select 22,N'龢'<br>union all select 23,N'龝'<br>union all select 24,N'齹'<br>union all select 25,N'龣'<br>union all select 26,N'龥'<br>union all select 27,N'齈'<br>union all select 28,N'龞'<br>union all select 29,N'麷'<br>union all select 30,N'鸞'<br>union all select 31,N'麣'<br>union all select 32,N'龖'<br>union all select 33,N'龗'<br>union all select 35,N'齾'<br>union all select 36,N'齉'<br>union all select 39,N'靐'<br>union all select 64,N'龘'<br>) T<br>where word&gt;=@word collate Chinese_PRC_Stroke_CS_AS_KS_WS<br>order by id ASC) else 0 end)<br>set @str=right(@str,len(@str)-1)<br>end<br>return @n<br>end</font></p>
<p><font size=3>--函数调用实例：<br>select dbo.fun_getbh('中华人民共和国'),dbo.fun_getbh('中華人民共和國')<br>　<br>　　执行结果：笔划总数分别为39和46，简繁体都行。</font></p>
<p><font size=3>&nbsp;&nbsp;&nbsp;&nbsp; 当然，你也可以把上面&#8220;UNION　ALL&#8221;内的汉字和笔划改存在固定表内，在汉字<br>列建CLUSTERED INDEX，列排序规则设定为：<br>　　　 Chinese_PRC_Stroke_CS_AS_KS_WS<br>这样速度更快。如果你用的是BIG5码的操作系统，你得另外生成汉字，方法一样。<br>但有一点要记住：这些汉字是通过SQL语句SELECT出来的，不是手工输入的，更不<br>是查字典得来的，因为新华字典毕竟不同于UNICODE字符集，查字典的结果会不正<br>确。</font></p>
<p><font size=3>　　<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　　　用排序规则的特性得到汉字拼音首字母</font></p>
<p><font size=3>　　用得到笔划总数相同的方法，我们也可以写出求汉字拼音首字母的函数。如下：</font></p>
<p><font size=3>create function fun_getPY(@str nvarchar(4000))<br>returns nvarchar(4000)<br>as<br>begin<br>declare @word nchar(1),@PY nvarchar(4000)<br>set @PY=''<br>while len(@str)&gt;0<br>begin<br>set @word=left(@str,1)<br>--如果非汉字字符，返回原字符<br>set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901<br>then (select top 1 PY from (<br>select 'A' as PY,N'驁' as word<br>union all select 'B',N'簿'<br>union all select 'C',N'錯'<br>union all select 'D',N'鵽'<br>union all select 'E',N'樲'<br>union all select 'F',N'鰒'<br>union all select 'G',N'腂'<br>union all select 'H',N'夻'<br>union all select 'J',N'攈'<br>union all select 'K',N'穒'<br>union all select 'L',N'鱳'<br>union all select 'M',N'旀'<br>union all select 'N',N'桛'<br>union all select 'O',N'漚'<br>union all select 'P',N'曝'<br>union all select 'Q',N'囕'<br>union all select 'R',N'鶸'<br>union all select 'S',N'蜶'<br>union all select 'T',N'籜'<br>union all select 'W',N'鶩'<br>union all select 'X',N'鑂'<br>union all select 'Y',N'韻'<br>union all select 'Z',N'咗'<br>) T<br>where word&gt;=@word collate Chinese_PRC_CS_AS_KS_WS<br>order by PY ASC) else @word end)<br>set @str=right(@str,len(@str)-1)<br>end<br>return @PY<br>end</font></p>
<p><font size=3>--函数调用实例：<br>select dbo.fun_getPY('中华人民共和国'),dbo.fun_getPY('中華人民共和國')<br>结果都为：ZHRMGHG</font></p>
<img src ="http://www.cppblog.com/tzhappyrose/aggbug/98186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tzhappyrose/" target="_blank">星星点灯</a> 2009-10-09 19:58 <a href="http://www.cppblog.com/tzhappyrose/archive/2009/10/09/98186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重要的是我们彼此相爱</title><link>http://www.cppblog.com/tzhappyrose/archive/2009/10/09/98182.html</link><dc:creator>星星点灯</dc:creator><author>星星点灯</author><pubDate>Fri, 09 Oct 2009 11:03:00 GMT</pubDate><guid>http://www.cppblog.com/tzhappyrose/archive/2009/10/09/98182.html</guid><wfw:comment>http://www.cppblog.com/tzhappyrose/comments/98182.html</wfw:comment><comments>http://www.cppblog.com/tzhappyrose/archive/2009/10/09/98182.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tzhappyrose/comments/commentRss/98182.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tzhappyrose/services/trackbacks/98182.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 时常我们在生活里面会不断的抱怨。忽略了我们已经拥有的。其实我想写的事情，是发生在我生活中的，最近一次，我跟同寝室的一个同学搞僵了。当我在一遍又一遍的抱怨时，其实什么问题也没解决好。反而是重复的把你那些不愉快的记忆再在你的脑海中梳理一遍。让你的伤心在重复一遍。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其实我们忘了，治疗心痛不满最好的良药就是爱，宽容。如果对方还会伤害你，最后就视而不见，云淡风轻。因为如果你不在乎的话，对方也就伤害不了你/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有多少次，我们唠叨，指责，埋怨，冷眼相向，以不惩不足以平我愤之精神，希望按照自己的想法去改变对方。可是多少次我们从爱出发，却走向了他的反面？求仁得仁，我们求的是爱，得的是什么呢》对孩子是这样，对我们爱的人也是这样，忘了曾在哪儿看到过这样一句话，：&#8220;我们应当彼此在意，趁现在还来得及，我们应当慈悲。&#8221;</p>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;记得爱国者的老总说过一句话:"如果对方打你左耳光，你就让他打。甚至把你的右耳光也替过去。如果他是一个有良知的人，他一定会跟你道歉，相反，那个人会继续恶霸下去，总有一天他会遇到教训他的人"。<br><br>&nbsp;&nbsp;&nbsp;&nbsp; 重要的是彼此相爱，爱是人内心最柔软的品质，任再大的风波，再糟糕的处境，再难收拾的烂摊子，打出这张王牌，谁会不动心？<br><br><br><br>
<img src ="http://www.cppblog.com/tzhappyrose/aggbug/98182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tzhappyrose/" target="_blank">星星点灯</a> 2009-10-09 19:03 <a href="http://www.cppblog.com/tzhappyrose/archive/2009/10/09/98182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>