<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>博客</title><link>http://www.loveyuki.com:80/blog</link><description>博客</description><item><title>隐藏 Firefox 书签工具栏菜单中的“在标签页中打开书签组”</title><link>http://www.loveyuki.com:80/blog/hide-firefox-open-all-in-tabs</link><description>&lt;p&gt;
	&lt;img alt="" height="160" src="http://www.smestorage.com/files/e5676612df4c7b6fd54ff4b5314b8113.png" width="550" /&gt;&lt;/p&gt;
&lt;p&gt;
	其实这个东西挺烦的，不小心点错了会开好多窗口，所以我决定把他隐藏了，要隐藏他就必须要用 Firefox 的 userChrome.css 文件了。&lt;/p&gt;
&lt;p&gt;
	开 始 -&amp;gt; 运行 -&amp;gt; 输入 %AppData%\Mozilla\Firefox\Profiles，然后进入里面类似 xxxxxxx.default 的目录，再进入 chrome 目录，把文件 userChrome-example.css 改名为 userChrome.css。&lt;/p&gt;
&lt;p&gt;
	然后修改 userChrome.css 文件，增加下面的 CSS 语句：&lt;/p&gt;
&lt;pre class="prettyprint lang-css"&gt;
menupopup[placespopup=&amp;quot;true&amp;quot;] &amp;gt; menuseparator:nth-last-child(-n+2), 
menupopup[placespopup=&amp;quot;true&amp;quot;] &amp;gt; menuseparator:nth-last-child(-n+2) + menuitem 
{ 
   display: none !important; 
} &lt;/pre&gt;
</description><pubDate>Tue, 13 Dec 2011 15:12:12 GMT</pubDate><guid isPermaLink="true">http://www.loveyuki.com:80/blog/hide-firefox-open-all-in-tabs</guid></item><item><title>MySQL 获取所有分类和每个分类的前几条记录</title><link>http://www.loveyuki.com:80/blog/mysql-get-category-top-record</link><description>&lt;p&gt;
	比如有文章表 Article(Id,Category,InsertDate)&lt;/p&gt;
&lt;p&gt;
	现在要用SQL找出每种类型中时间最新的前N个数据组成的集合&lt;/p&gt;
&lt;pre class="prettyprint lang-sql linenums"&gt;
SELECT A1.*  
FROM Article AS A1  
     INNER JOIN (SELECT A.Category,A.InsertDate 
                 FROM Article AS A  
                      LEFT JOIN Article AS B  
                        ON A.Category = B.Category  
                           AND A.InsertDate &amp;lt;= B.InsertDate  
                 GROUP BY A.Category,A.InsertDate 
                 HAVING COUNT(B.InsertDate) &amp;lt;= @N 
    ) AS B1  
    ON A1.Category = B1.Category  
       AND A1.InsertDate = B1.InsertDate 
ORDER BY A1.Category,A1.InsertDate DESC &lt;/pre&gt;
&lt;p&gt;
	@N 就是要取多少条&lt;/p&gt;
</description><pubDate>Tue, 13 Dec 2011 15:02:48 GMT</pubDate><guid isPermaLink="true">http://www.loveyuki.com:80/blog/mysql-get-category-top-record</guid></item><item><title>身份证号码验证函数</title><link>http://www.loveyuki.com:80/blog/csharp-check-chinese-id</link><description>&lt;pre class="prettyprint lang-cs linenums"&gt;
private bool CheckCardNumber(string number) 
{ 
    int[] iW = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 }; 
    int iSum = 0; 
    for (int i = 0; i &amp;lt; 17; i++) 
    { 
        int iVal = 0; 
        int.TryParse(number[i].ToString(), out iVal); 
 
        iSum += iVal * iW[i]; 
    } 
 
    int iCheck = iSum % 11; 
 
    string check = string.Empty; 
 
    switch (iCheck) 
    { 
        case 0: check = &amp;quot;1&amp;quot;; break; 
        case 1: check = &amp;quot;0&amp;quot;; break; 
        case 2: check = &amp;quot;x&amp;quot;; break; 
        case 3: check = &amp;quot;9&amp;quot;; break; 
        case 4: check = &amp;quot;8&amp;quot;; break; 
        case 5: check = &amp;quot;7&amp;quot;; break; 
        case 6: check = &amp;quot;6&amp;quot;; break; 
        case 7: check = &amp;quot;5&amp;quot;; break; 
        case 8: check = &amp;quot;4&amp;quot;; break; 
        case 9: check = &amp;quot;3&amp;quot;; break; 
        case 10: check = &amp;quot;2&amp;quot;; break; 
    } 
 
    string valid = number[17].ToString().ToLower(); 
 
    return valid == check; 
} &lt;/pre&gt;
</description><pubDate>Tue, 13 Dec 2011 15:01:51 GMT</pubDate><guid isPermaLink="true">http://www.loveyuki.com:80/blog/csharp-check-chinese-id</guid></item><item><title>SQL Server 2005 以上版本使用 CTE 分割字符串</title><link>http://www.loveyuki.com:80/blog/cte-split-string-in-sql-server-2005-up</link><description>&lt;pre class="prettyprint lang-sql linenums"&gt;
ALTER FUNCTION [dbo].[UF_SpliteIntToTable] 
( 
    @String VARCHAR(8000) 
) 
RETURNS @Table TABLE (Id INT) 
AS 
BEGIN 
    DECLARE @SpliteChar AS CHAR(1) = &amp;#39;,&amp;#39;; 
         
    WITH TempTable AS 
    ( 
        SELECT CAST(SUBSTRING(@String,1,CHARINDEX(@SpliteChar,@String,1) - 1) AS INT) AS item, 
        SUBSTRING(@String,CHARINDEX(@SpliteChar,@String,1) + 1, LEN(@String)) + @SpliteChar AS list 
 
        UNION ALL 
 
        SELECT CAST(SUBSTRING(list,1,CHARINDEX(@SpliteChar,list,1) - 1) AS INT) AS item, 
        SUBSTRING(list,CHARINDEX(@SpliteChar,list,1) + 1, LEN(list)) AS list 
        FROM TempTable 
        WHERE LEN(TempTable.list) &amp;gt; 0 
    ) 
 
    INSERT INTO @Table SELECT item FROM TempTable WHERE item &amp;gt; 0 
         
    RETURN 
END &lt;/pre&gt;
</description><pubDate>Tue, 13 Dec 2011 14:59:54 GMT</pubDate><guid isPermaLink="true">http://www.loveyuki.com:80/blog/cte-split-string-in-sql-server-2005-up</guid></item><item><title>SQL Server 中删除重复记录</title><link>http://www.loveyuki.com:80/blog/sql-serve-delete-duplicate-records</link><description>&lt;p&gt;
	最常用的 T-SQL 语句：&lt;/p&gt;
&lt;pre class="prettyprint lang-sql linenums"&gt;
DELETE FROM [dbo].[myTable] WHERE 主键 NOT IN 
    (SELECT MAX(主键) From [dbo].[myTable] GROUP BY 列1, 列2, 列3) &lt;/pre&gt;
&lt;p&gt;
	SQL Server 2005 及以上版本，用 CTE：&lt;/p&gt;
&lt;pre class="prettyprint lang-sql linenums"&gt;
WITH tmpOrderdTable 
AS 
( 
  SELECT  
    GroupID = ROW_NUMBER() OVER (PARTITION BY 列1, 列2, 列3 ORDER BY 主键) 
  FROM 
    [dbo].[myTable] 
) 
 
DELETE FROM tmpOrderdTable WHERE GroupID &amp;gt; 1 &lt;/pre&gt;
&lt;p&gt;
	为了提高效率可以先开启单人存取模式，删除完再恢复多人存取模式：&lt;/p&gt;
&lt;pre class="prettyprint lang-sql linenums"&gt;
# 开启单人存取模式  
USE [master]  
ALTER DATABASE [myDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE  
      
# 开启多人存取模式  
USE [master]  
ALTER DATABASE [myDB] SET MULTI_USER WITH ROLLBACK IMMEDIATE  &lt;/pre&gt;
</description><pubDate>Tue, 13 Dec 2011 14:54:58 GMT</pubDate><guid isPermaLink="true">http://www.loveyuki.com:80/blog/sql-serve-delete-duplicate-records</guid></item></channel></rss>
