2014年3月23日 星期日

MS SQL指令應用篇

2022/12/06
查詢某個區段的資料,我們可以在條件上使用between,如下。
(欄位 between CONVERT(date,'2022-10-01') and CONVERT(date,'2022-10-31'))

2021/12/03
1. 字串1101203,拆出年、月、日,年轉西元年
Begin
Declare @StrTmp varchar(7);
Set @StrTmp='1101031';

Select (left(@StrTmp,3)+1911) as yy,CONVERT(int,substring(@StrTmp,4,2)) as mm,CONVERT(int,substring(@StrTmp,6,2)) as dd
End
2023/05/17 另一種方法就是將民國直接轉成數字,再加上19110000
CAST(str(CONVERT(int,left('1120101',7))+19110000) AS Date)

2019/07/02
Select Update指令如下
update fs set fs.Name=m.Name
From Table1 as fs left join Table2 as m on fs.ID=m.ID where m.Name is not null

Select Insert指令如下
Insert Table1 (t1,t2)
Select c1,c2 From Table2 where email='TEST@abc.com'

2019/03/28
通常會使用union去將很多張表合併成一張表,而union與union all的差別在於union all會將所有的資料都合併成一張表,所以得到的結果可能同一筆資料會出現兩筆以上的資料;如果使用union重複的資料則會顯示一筆。

2018/04/17
STATISTICS TIME
參考資料:[SQL SERVER] SET STATISTICS 語法執行時間分析與統計訊息
參考資料:SET STATISTICS TIME (Transact-SQL)
可以檢視自己的SQL指令,花了多少時間執行。
範例:
SET STATISTICS TIME ON;
GO

--SQL 語句--
Select  * from table1

GO

SET STATISTICS TIME OFF;
GO

2017/10/24
datalength函數:可以知道資料的長度,例如姓名中文3個字,在資料庫中的資料長度是6。
replicate(' ',4)函數:第一個參數是自己想要插入的字元,第二個參數是插入幾個字元。

2017/05/23
有一種狀況是某個欄位它不是主鍵,但它不能有重複的資料,這個時候可以透過UNIQUE來限制這個欄位的資料必須為唯一,就能避免重複的資料進入資料表時,指令如下:
ALTER TABLE 資料表名稱
ADD CONSTRAINT 自己給一個識別名稱 UNIQUE(欄位)
有一點要注意,欄位不能為NULL

2017/05/22
針對現有的資料表,運用指令方式加入外部索引鍵,以下是1對N的關係,每1張訂單會包含很多筆的訂單明細
ALTER TABLE test_order_detail
ADD
CONSTRAINT FK_test_order_detail_test_order
FOREIGN KEY (Order_no)
REFERENCES test_order(Order_no);
說明:
CONSTRAINT設定外部索引鍵的識別名稱,FK_test_order_detail_test_order是我自己自訂名稱。
FOREIGN KEY設定test_order_detail資料表的Order_no為外部索引鍵。
REFERENCES指定test_order資料表的Order_no為主鍵(主索引鍵)。

2015/05/11
利用CHARINDEX函數(搜尋字元位置),找出符合的資料;假設我們要針對某個資料表(名為table1),某ㄧ個欄位(名為status1,這個欄位會儲存A~D的英文代碼),找出符合A或C的代碼,如下:
Select *,CHARINDEX(status1,'AC') form table1 where CHARINDEX(status1,'AC')>0
說名:如果CHARINDEX函數有找到A或C,此函數就會回傳字元目前的位置。

2014/11/13
區分大小寫-在欄位後加上 Collate Chinese_Taiwan_Stroke_CS_AS(繁中區分大小寫)
select adm.userid,adm.password from s1 as adm
where adm.userid Collate Chinese_Taiwan_Stroke_CS_AS=@userid
and adm.password Collate Chinese_Taiwan_Stroke_CS_AS=@password

2014/10/29
使用CTE暫存資料,並執行刪除重複的資料,此方法適用於MS SQL 2005以上版本
說明:idno為學生學號,values為學生成績;由學生成績有高到低排序,並取最高的成績。
;WITH temp1 AS (
  select idno,values,ROW_NUMBER() OVER(partition by idno order by values desc) as aid from cv
)
DELETE FROM temp1
WHERE aid > 1;

補充:相同成績要相同排名ROW_NUMBER()改成RANK()

2014/09/03
--將年月日轉換為2014/09/03 10:00
select CONVERT(varchar(16),getdate(),120) as dt
--補充:如果要取到秒數,請將varchar(16)改為varchar(19);如果只想取得日期,請將varchar(16)改為varchar(10) 。
--取得日期時間的時間,例如:2014-09-03 08:02:24;執行下列指令會取得時間 08:02:24
select CONVERT(varchar(8),getdate(),108)
--補充:如果要取幾點幾分,請將varchar(8)改為varchar(5)。

2014/02/27
取得日期時間
參考資料:CAST 和 CONVERT (Transact-SQL)
--getdate取得現在時間;
select convert(varchar(10),getdate(),120) as str_date,convert(varchar(16),getdate(),120) as str_datetime

轉換int型態
select (CONVERT(int,'2014')-1911)-1 as s
轉換varchar型態
CONVERT(varchar, 欄位) as s

2014年3月19日 星期三

JavaScript 如何知道每個月的天數

參考資料:JavaScript實例判斷是否為正確日期格式

有時候我們會將使用者所輸入的日期作個比較,然後再來作進一步資料篩選的運用,但問題來了我怎麼知道每個月份的天數到底有多少天呢? 不管您是使用下拉式選單或輸入方塊(TextBox)讓使用者自行輸入,都會碰到這個問題。

以下是擷取參考資料裡的某段程式碼作修改,在此記錄下來

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Pragma" content="No-cache" />
<title>JavaScript日期應用</title>
</head>
<body>
<script>
var d = new Date();
document.write('今天日期是 ' + d.getFullYear()+ ' 年 ' + (d.getMonth()+1) + ' 月 ' + d.getDate() + ' 日 <br/>');
var iaMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];//每個月的天數
for (var year=2000;year<=2030;year++){
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)){
iaMonthDays[1]=29; //有些年份的二月會是29天
document.write('<font color="Red">'+year+'年2月份天數為'+iaMonthDays[1]+'天</font><br/>');
}else{
   iaMonthDays[1]=28;
document.write('<font color="Blue">'+year+'年2月份天數為'+iaMonthDays[1]+'天</font><br/>');
};
}
</script>
</body>
</html>

2014年2月22日 星期六

JQuery 記錄使用者點擊li,重整後顯示點擊的li

只記錄使用者目前點擊的項目,不包含使用者點擊過哪些項目

參考資料:
jQuery教學-點選開啟下拉選單

前置作業:
使用JQuery-v1.6.4

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>記錄點擊li,重整後顯示點擊的li</title>
<script src="js/jquery.min.js" language="javascript"></script>
<script>
$(function(){
       //cookie不等於0
if( document.cookie.length!=0 ){
   var s_value=document.cookie.search('click_item=');//search字串搜尋,沒有找到為-1;
var e_value,str_CookTemp;
if( s_value!=-1 ){
s_value=s_value+('click_item='.length);
e_value=document.cookie.indexOf(';', s_value);
if( e_value==-1 ){
      e_value=document.cookie.length;
   }
str_CookTemp=document.cookie.slice(s_value,e_value);
//使用parents()可以取得DOM中的html元素;find搜索所有段落
var get_li=$('.menu ul:eq('+(str_CookTemp)+')').parents('li').find('a[href="#"]');
var str_title=get_li.html(); //取得title名稱
str_title=str_title.replace("►","▼");
get_li.html(str_title); //變更標題名稱
get_li.next().show();
}
}
$(".menu li a").click(function(){
var _this=$(this);
var on_li=$(this).closest('li'); //取得a上一層的li
var li_index=on_li.index(); //記錄li的index
document.cookie='click_item='+li_index+';'; //記錄點了哪一個li
if(_this.next("ul").length>0){
if(_this.next().is(":visible")){
//隱藏子選單並替換符號
_this.html(_this.html().replace("▼","►")).next().hide();
}else{
//開啟子選單並替換符號
_this.html(_this.html().replace("►","▼")).next().show();
}
//關閉連結
return false;
}
});

});
</script>
<style>
a{color:#333333; text-decoration:none; font-size:12px;}
a:hover{text-decoration:underline;}
ul{margin:0;padding:0;list-style-type: none;}
ul.submenu{display:none;}
ul.submenu{margin-left:25px;list-style-type:disc; color:#333333;}
</style>
</head>
<body>
<ul id="ulid" class="menu">
<li>
    <a href="#">►abc公司</a>
    <ul class="submenu">
        <li><a href="http://localhost/" target="_blank">部門1</a></li>
            <li><a href="http://localhost/" target="_blank">部門2</a></li>
        </ul>
    </li>
<li>
    <a href="#">►def公司</a>
    <ul class="submenu">
        <li><a href="http://localhost/" target="_blank">部門1</a></li>
            <li><a href="http://localhost/" target="_blank">部門2</a></li>
            <li><a href="http://localhost/" target="_blank">部門3</a></li>              
        </ul>
    </li>
    <li>
    <a href="#">►ghi公司</a>
    <ul class="submenu">
        <li><a href="http://localhost/" target="_blank">部門1</a></li>
            <li><a href="http://localhost/" target="_blank">部門2</a></li>
            <li><a href="http://localhost/" target="_blank">部門3</a></li>
            <li><a href="http://localhost/" target="_blank">部門4</a></li>      
        </ul>
    </li>  
</ul>
</body>
</html>

2014年2月18日 星期二

JQuery Mobile 應用篇

適用於JQuery Mobile-1.1.0

checkboxradio(Checkbox)設定
1.選擇input name=n1 值是100,設定為勾選,並刷新
$('input[name="n1"][value="100"]').prop('checked', true);
$('input[name="n1"]').checkboxradio(); //等同刷新-此方法是動態產生元件使用

2.選擇n2設定不啟用(可看到checkbox但無法點選)
$('input[name="n2"]').prop('disabled', true);
$('input[name="n2"]').checkboxradio(); //等同刷新-此方法是動態產生元件使用

3.建立事件
$('input[type="radio"][name="n2"]').bind( "change",function(){....});


selectmenu(Select下拉式選單)設定
1.選擇id=select1的選項值100設定為預設選項
$('#select1 option[value="100"]').prop('selected', true);
$('#select1' ).selectmenu(); //等同刷新-此方法是動態產生元件使用

2.選擇id=select2 設定為不啟用
$('#select2').prop('disabled', true);
$('#select1' ).selectmenu(); //等同刷新-此方法是動態產生元件使用

Button設定
1.按鈕顯示及隱藏
$('#Button1').closest('.ui-btn').show(); //按鈕顯示
$('#Button1').closest('.ui-btn').hide(); //按鈕隱藏

2.設定按鈕顯示文字
$("#Button1").prev('span').find('span.ui-btn-text').text("這是button1");

3.設定按鈕為不啟用(jquery.mobile-1.4.2可用)
$('#Button1').addClass('ui-state-disabled'); //不啟用
$('#Button1').removeClass('ui-state-disabled'); //移除ui-state-disabled 代表啟用

4.按鈕不啟用(jquery.mobile-1.4.4)
$('#Button1').button().button('disable');
P.S 如果是在ajax中執行可以寫成$('#Button1').button('disable');

備註
2015/01/13
1.假如在jquery mobile的pageinit事件中使用到jquery $post時,必須注意如果在javascript中有使用到$.mobile.changePage切換頁面,此時會在跑一次pageinit事件,大置上如下。
$(document).bind('pageinit', function (init_event) {
   //如果使用$.mobile.changePage切換頁面,會在跑一次pageinit
   $.post('a.aspx',{sd: str_comm},function(data, status){
   .....
   });
});

2014年1月13日 星期一

IIS6 設定寫入檔案

問題敘述:今日正在試著利用ASP.NET寫上傳檔案功能時,所遇到的問題,這可能之前也有遇過但當時並沒有記錄下來又或者筆記不知道被我埋沒到哪裡去了;而我寫的檔案上傳並不是使用ASP.NET中的FileUpload控制項來撰寫的,而是使用html的<input type=”File”/>撰寫的,再透過form的方式送到另外一個網頁做處理存檔的動作,不過我想只要想將檔案寫入(上傳)的Server端應該都必須做這樣的設定。

如果出現以下訊息,很有可能是IIS權限設定未設定成寫入所造成…

伺服器應用程式無法使用
您嘗試在此 Web 伺服器上存取的 Web 應用程式目前無法使用。請按 Web 瀏覽器中的 [重新整理] 按鈕,再試一次。

系統管理員注意: Web 伺服器的應用程式事件記錄檔中的錯誤訊息詳細說明了這項特定要求失敗原因。請檢閱這個記錄項目,查看造成錯誤的原因為何。

解決方法:

Step 1. 開啟IIS6→在專案上按右鍵→點選:使用權限

Step 2. 點選:Users→勾選:寫入→確定

以上如有誤導請指正

2014年1月8日 星期三

PhoneGap使用開發IOS

本篇記錄如何使用PhoneGap套用在IOS的App專案上

前置作業:
1.請先在Mac電腦上安裝好IOS的開發環境
2.請到PhoneGap網站下載PhoneGap檔案(我是使用PhoneGap 2.9.1),並解壓縮

步驟:
Step 1.解壓縮完後,請切換到PhoneGap-2.9.1→lib→ios→bin資料夾底下


請先執行選擇:create檔案→右鍵→打開檔案的應用程式,點選:終端機.app

當點擊:終端機.app,會看到如下視窗:
請看到紅色框框,此處就是待會要下指令建立PhoneGap ios專案的指令
path_to_new_project:建立專案的路徑名稱,包含專案資料夾名稱
package_name:請自行看英文解釋,簡單講就是像android建立專案時要我們輸入的package
project_name:專案名稱

Step 2.PhoneGap-2.9.1→lib→ios→bin資料夾,按右鍵→選擇:「新增位於檔案夾位置終端機」並下指令,如下圖。

P.S如果指定的路徑有錯,會出現其它訊息

Step 3.建立成功後,請到剛剛建立專案的資料夾底下打開檔案(我的開發環境是xcode 5),點選左邊的config.xml,找到content標籤修改src屬性改成自己的網頁即可,最後請執行看看是否成功。



Apple Mac 設定技巧篇

本篇記錄有關Apple Mac電腦相關設定,因為自己對於Mac電腦不熟,所以自行記錄。

主要目錄如下:
1.滑鼠右鍵執行「新增位於檔案夾位置終端機」

內容:
1.新增位於檔案夾位置終端機
如果你對於在終端機下cd指令不熟,這個技巧還蠻方便的。
Step 1.系統偏好設定→鍵盤→快速鍵,選擇「服務」並勾選:新增位於檔案夾位置終端機,如圖下。

最後只要在你要的資料夾底下,按滑鼠右鍵→新增位於檔案夾位置終端機,就可以直接切換到資料夾底下的終端機