2011年4月25日 星期一

[轉]如何使用 CAST 與 CONVERT 格式化日期與時間資料

資料來源:
http://ithelp.ithome.com.tw/question/10008820

SQL Server 的 CAST 與 CONVERT 可以讓我們明確地轉換運算式的資料型別,這次我們就是要討論如何使用這兩個函式來格式化日期與時間資料。


CAST 與 CONVERT 都提供類似的功能讓我們明確地轉換運算式的資料型別,我們就先看看 CONVERT 的語法:

  1. CONVERT ( 資料型別 [ (資料長度) ] , 運算式 [ , 日期格式樣式 ] )  


由上面的語法可以看出來 CONVERT 擁有指定「日期格式樣式」的選項,就讓我們透過實際的例子來看看轉換效果:
  1. -- 定義變數  
  2. DECLARE @myDate DATETIME  
  3. -- 指派一個日期給該變數  
  4. SET @myDate = '2008/09/09 08:25 AM'  
  5.   
  6. -- 開始轉換  
  7. PRINT CONVERT(CHAR(19), @myDate)  
  8. PRINT CONVERT(CHAR(19), @myDate, 0)  
  9. PRINT CONVERT(CHAR(8),  @myDate, 1)  
  10. PRINT CONVERT(CHAR(8),  @myDate, 2)  
  11. PRINT CONVERT(CHAR(8),  @myDate, 3)  
  12. PRINT CONVERT(CHAR(8),  @myDate, 4)  
  13. PRINT CONVERT(CHAR(8),  @myDate, 5)  
  14. PRINT CONVERT(CHAR(9),  @myDate, 6)  
  15. PRINT CONVERT(CHAR(10), @myDate, 7)  
  16. PRINT CONVERT(CHAR(8),  @myDate, 8)  
  17. PRINT CONVERT(CHAR(26), @myDate, 9)  
  18. PRINT CONVERT(CHAR(8),  @myDate, 10)  
  19. PRINT CONVERT(CHAR(8),  @myDate, 11)  
  20. PRINT CONVERT(CHAR(6),  @myDate, 12)  
  21. PRINT CONVERT(CHAR(24), @myDate, 13)  
  22. PRINT CONVERT(CHAR(12), @myDate, 14)  
  23. PRINT CONVERT(CHAR(19), @myDate, 20)  
  24. PRINT CONVERT(CHAR(23), @myDate, 21)  
  25. PRINT CONVERT(CHAR(20), @myDate, 22)  
  26. PRINT CONVERT(CHAR(10), @myDate, 23)  
  27. PRINT CONVERT(CHAR(8),  @myDate, 24)  
  28. PRINT CONVERT(CHAR(23), @myDate, 25)  
  29. PRINT CONVERT(CHAR(19), @myDate, 100)  
  30. PRINT CONVERT(CHAR(10), @myDate, 101)  
  31. PRINT CONVERT(CHAR(10), @myDate, 102)  
  32. PRINT CONVERT(CHAR(10), @myDate, 103)  
  33. PRINT CONVERT(CHAR(10), @myDate, 104)  
  34. PRINT CONVERT(CHAR(10), @myDate, 105)  
  35. PRINT CONVERT(CHAR(11), @myDate, 106)  
  36. PRINT CONVERT(CHAR(12), @myDate, 107)  
  37. PRINT CONVERT(CHAR(8),  @myDate, 108)  
  38. PRINT CONVERT(CHAR(26), @myDate, 109)  
  39. PRINT CONVERT(CHAR(10), @myDate, 110)  
  40. PRINT CONVERT(CHAR(10), @myDate, 111)  
  41. PRINT CONVERT(CHAR(8),  @myDate, 112)  
  42. PRINT CONVERT(CHAR(24), @myDate, 113)  
  43. PRINT CONVERT(CHAR(12), @myDate, 114)  
  44. PRINT CONVERT(CHAR(19), @myDate, 120)  
  45. PRINT CONVERT(CHAR(23), @myDate, 121)  
  46. PRINT CONVERT(CHAR(23), @myDate, 126)  
  47. PRINT CONVERT(CHAR(23), @myDate, 127)  
  48. PRINT CONVERT(CHAR(32), @myDate, 130)  
  49. PRINT CONVERT(CHAR(25), @myDate, 131)  


執行結果:


接下來看 CAST 的語法:
  1. CAST (運算式 AS 資料型別 [ (資料長度) ])  


與 CONVERT 相比,CAST 馬上就遜掉了,因為 CAST 沒有辦法指定日期格式樣式,如果要指定的話,勢必要自己加工過。
例如,我們要像 YYYY-MM-DD HH:MI:SS.sss 這樣的結果:
  1. -- 定義變數  
  2. DECLARE @myDate DATETIME  
  3. -- 指派一個日期給該變數  
  4. SET @myDate = '2008/09/09 08:25 AM'  
  5.   
  6. -- 開始轉換  
  7. PRINT '使用 CONVERT 轉換 ==> ' +  
  8.     CONVERT(CHAR(23), @myDate, 21)  
  9. PRINT '使用 CAST 轉換 =====> ' +  
  10.     CAST(DATEPART(YY, @myDate) AS CHAR(4)) + '-'  
  11.     + RIGHT(CAST(100 + DATEPART(MM, @myDate) AS CHAR(3)), 2) + '-'  
  12.     + RIGHT(CAST(100 + DATEPART(DD, @myDate) AS CHAR(3)), 2) + ' '  
  13.     + RIGHT(CAST(100 + DATEPART(HH, @myDate) AS CHAR(3)), 2) + ':'  
  14.     + RIGHT(CAST(100 + DATEPART(MI, @myDate) AS CHAR(3)), 2) + ':'  
  15.     + RIGHT(CAST(100 + DATEPART(SS, @myDate) AS CHAR(3)), 2) + '.'  
  16.     + RIGHT(CAST(1000+ DATEPART(MS, @myDate) AS CHAR(4)), 3)  


執行結果:


接下來我們直接透過實際的程式碼,討論如何把 AM 或 PM 換成中文的上午或下午:
  1. DECLARE @myDate DATETIME  
  2. SET @myDate = '2008/09/09 08:25 AM'  
  3. SELECT CAST(DATEPART(YYYY, @myDate) AS CHAR(4)) + '/'   
  4.     + RIGHT(CAST(100 + DATEPART(MM, @myDate) AS CHAR(3)), 2) + '/'  
  5.     + RIGHT(CAST(100 + DATEPART(DD, @myDate) AS CHAR(3)), 2) + ' '  
  6.     + CASE WHEN DATEPART(HH, @myDate) < 13  
  7.         THEN RIGHT(CAST(100 + DATEPART(HH, @myDate) AS CHAR(3)), 2)  
  8.         ELSE CAST(DATEPART(HH, @myDate) - 12 AS CHAR(2))  
  9.     END + ':'  
  10.     + RIGHT(CAST(100 + DATEPART(MI, @myDate) AS CHAR(3)), 2)  
  11.     + CASE WHEN DATEPART(HH, @myDate) < 13  
  12.         THEN '上午'  
  13.         ELSE '下午'  
  14.     END  


執行結果:


最後,就以轉換西元日期成為民國年作為最後一個轉換的範例吧:
  1. DECLARE @myDate DATETIME  
  2. SET @myDate = '2008/09/09 08:25 AM'  
  3. SELECT CAST(YEAR(@myDate) - 1911 AS NVARCHAR(3)) + '年'  
  4.     + CAST(Month(@myDate) AS NVARCHAR(2)) + '月'  
  5.     + CAST(Day(@myDate) AS NVARCHAR(2)) + '日'  


執行結果:

2011年4月20日 星期三

讓window.open的彈出視窗置中

function openwindow(url,name,iWidth,iHeight)
{
  var url;     //網頁位置;
  var name;    //網頁名稱;
  var iWidth;  //視窗的寬度;
  var iHeight; //視窗的高度;
  var iTop = (window.screen.availHeight-30-iHeight)/2;  //視窗的垂直位置;
  var iLeft = (window.screen.availWidth-10-iWidth)/2;   //視窗的水平位置;
  window.open(url,name,'height='+iHeight+',,innerHeight='+iHeight+',width='+iWidth+',innerWidth='+iWidth+',top='+iTop+',left='+iLeft+',status=no,location=no,status=no,menubar=no,toolbar=no,resizable=no,scrollbars=no');
}

資料來源:http://www.cnblogs.com/shiyu007/archive/2006/12/05/582801.html

2011年4月18日 星期一

Microsoft Office PowerPoint 2003 資訊安全更新 (KB2464588) 更新後,PowerPoint 2003編輯PowerPoint 2007另存成97-2003版的檔案會造成PowerPoint 無回應

裝了KB2464588的安全性更新以後會出現這個錯誤,



只要移除KB2464588就不會出現錯誤,可以暫時解決這個問題

參考資源:
http://social.technet.microsoft.com/Forums/zh-TW/officezhcht/thread/24ea7738-520e-43a1-a4f0-59d061cbcd1d

2011年4月12日 星期二

UTM設定的23事

UTM設定網路介面的畫面中有一個負載分配模式,在設定的實務上發現了其中的巧妙.
負載分配模式共有四個選項,大略的功能如下:
1.自動分配:讓UTM自行決定負載的線路,最傻瓜但是使用某些網頁系統如Plesk,會有無法正常登入系統的問題(登入後會一直跳回帳號密碼提示頁面).

2.手動分配:管理者自行決定線路的優先權.

3.依來源IP分配:判別連線是由內部哪用戶來進行連線,維持由此連線路徑,彼此互傳封包。

4.依目的IP分配:判別內部用戶是透過UTM的哪條對外線路,和遠端設備建立連線,於終止(完成)所有和同一設備的連線前,維持由此連線路徑,彼此互傳封包。

目前是選擇用"依目的IP分配",來解決無法正常登入Plesk的問題。
依內部用戶需求測試調整後改為"依來源IP分配"。(20110504)

2011年4月2日 星期六

使用Facebook PHP SDK在IE無法使用getsession的問題

最近寫了幾個Facebook的App.
發生了一個蠻怪的問題就是IE以外的瀏覽器都可以正常的取得$_POST變數的值,
唯獨使用IE的時候沒有辦法取得$_POST變數值.
搞了好久才發現是Facebook PHP SDK在ie執行的時候.
在接收傳值的頁面,如果使用$facebook->getsession(),他會先redirect以取得目前的session.
這個狀況會導致$_POST的值跑掉.
最後用google找到一個方法.解決跨網域的問題.
在執行PHP SDK前先判斷是不是瀏覽器是不是ie.
如果是的話就餵給他一段檔頭.
以下為程式碼的範例:

if (stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE'))
    {
    header('p3p: CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"');
    }

也可以直接加在IIS或Apache上.
IIS:
功能檢視->HTTP回應標頭->新增->名稱:p3p;值:CP=CAO PSA OUR

apache:
<VirtualHost>  
Header set P3P 'CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'  
</VirtualHost> 

參考來源:
http://forum.developers.facebook.net/viewtopic.php?id=73645
http://forum.developers.facebook.net/viewtopic.php?id=74056
http://www.neatstudio.com/show-1390-1.shtml