2011年11月7日 星期一

MS SQL 200 資料型態

資料型態:

資料型態說明範例
INT長度為 4 個 bytes;介於 -2,147,483,648 與 2,147,483,647 間的整數 
SMALLINT長度為 2 個 bytes;介於 -32,768 與 32,767 間的整數 
TINYINT長度為 1 個 bytes;介於 0 與 255 間的整數 
BIGINT長度為 8 個 bytes;介於 -2^63 與 2^63-1 間的整數 
FLOAT[(n)]n 是儲存 float 數字的小數位數,介於 1 與 53 間; 若 n 介於 1 與 24 間,儲存大小為 4 個 bytes,有效位數為 7 位數;若 n 介於 25 與 53 間,儲存大小為 8 個 bytes,有效位數為 15 位數
create table p_ex (num1 real, num2 float)
insert into p_ex values(4000000.123456789, 
                  4000000.123456789012345)
insert into p_ex values(400.123456789, 
                  400.1234567890123456789)
select * from p_ex
// real 共顯示八位數,float 共顯示 17 位數
REAL長度為 4 個 bytes;介於 -3.4E-38 與 3.4E+38 間的浮點數;與 FLOAT(24) 相同 
DECIMAL[(p[,s])]使用 2 到 17 個 bytes 來儲存資料,可儲存的值介於 -1038-1 與 1038-1 之間;p 用來定義小數點兩邊可以被儲存的位數總數目,而 s 代表小數點右邊的有效位數(s < p);p的預設值為 18 而 s 的預設值為0
create table p_ex (num1 numeric(19,9), 
                   num2 decimal)
insert into p_ex values(4000000.123456789, 
                  4000000.123456789012345)
select * from p_ex
NUMERIC[(p[,s])]與 DECIMAL[(p[,s])] 同 
CHAR[(n)]固定長度為 n 的字元型態,n 必須介於 1 與 8000 之間 
VARCHAR[(n)]與 CHAR 相同,只是若輸入的資料小於 n,資料庫不會自動補空格,因此為變動長度之字串 
NCHAR 與 NVARCHAR與 CHAR 以及 VARCHAR 相同,只是每一個 字元為兩個 bytes 的 unicode,且 n 最大為 4000 
DATETIME長度為 8 個 bytes;介於 1/1/1753 與 12/31/9999 間的日期時間 
SMALLDATETIME長度為 4 個 bytes;介於 1/1/1900 與 6/6/2079間的日期時間
create table d_ex (d1 datetime, 
                   d2 smalldatetime)
insert into d_ex values ('1/1/1753', 
                       'Jan 2 1900')
select * from d_ex
MONEY長度為 8 個 bytes 的整數,小數點的精確度取四位 
SMALLMONEY長度為 4 個 bytes 的整數,小數點的精確度取四位 
BIT只佔用一個位元,且不允許存放 NULL 值 
BINARY[(n)]固定長度為 n+4 個 bytes; n 為 1 到 8000 的值,輸入的 值必需符合兩個條件: (1) 每一個值皆為 0-9、a-f 的值;(2)每一個值的前面必須有 0X
create table b_ex (x binary(1), y binary(2))
insert into b_ex values(0x0, 0x0)
insert into b_ex values(0x1, 0x1)
insert into b_ex values(0xff, 0xff)
insert into b_ex values(0xfff, 0xfff)
insert into b_ex values(0xff, 0xfff)
insert into b_ex values(0xffff, 0xffff)
insert into b_ex values(0xff, 0xffff)
select * from b_ex
VARBINARY[(n)]與 BINARY 相同,只是若輸入的資料小於 n,資料庫 不會自動補 0,因此長度為變動的 
TEXT用來儲存大量的(可高達兩億個位元組)字元資料,儲存空間 以 8k 為單位動態增加 
NTEXT和 TEXT 雷同,只是儲存的是 Unicode 資料 
IMAGE和 TEXT 雷同,只是儲存的是影像資料 
SQL_VARIANT此資料型別可儲存 text、ntext、timestamp 與 sql_variant以外的各種 SQL Server 支援的資料型別。a sql_variant column can contain smallint values for some rows, float values for other rows, and char/nchar values in the remainder.
create table  b_ex (x int, y sql_variant)
insert into b_ex values(5, '五十')
insert into b_ex values(6, 60)
select * from b_ex

MSSQL 簡體字存入亂碼解決方式

資料庫型態須定義為 ntext 或是 nchar , nvarchar

若定義成一般習慣前面未加 'n' 將只能放本國語系的文字

如果簡體字存入就會變成 '?'

而當 Insert 或是 UPDATE 資料時直接將簡體資料寫入也會變成 '?'

寫法必須改為 INSERT INTO table_name(test) VALUES(N'测试')

在寫入的資料前要加 N 他在存入資料庫時才會去呼掉到擴充字集..

如未加 N 他則是使用 big-5 字集...如果使用 .Net 裡面的 DataApdater 來

Update 資料也要注意 Parameters 裡面的關於每個參數的型態設定..

股票基本入門 2011.11.07 (一)

買進時需(手續費):0.001,425元
賣出時需(手續費):0.001,425元
賣出時需付(證交所稅)0.003元
以上總計 0.0585(基本費用)

1股10元,一張股票1000股
假設:1股10塊錢

你買進1張股票 =1,000股
買:1,000 X 10 X 0.001,425 = 14.25 元手續費
補允說明:14.25元手續費 但最低手續費不買20塊,都收20塊
補允建議:你還是湊買 20塊比較省點錢

每家證券行都有下單手續費 2.5~6折
以剛算的買進:14.25(手續費 ) X 0.6 = 8.55 (折古後手續費)
但是給你打六折手續費也沒用,因為基本手續費就20塊(哈哈哈)

買跟賣一樣都要手續費
賣的時候要多加一個證券交易稅(0.003元)
假設:1,000股 X 10 X 0.00,1425 = 14.25 元 (不足20元,自動調整20元)
100,000 - 20 = 99,980 元
9980 X 0.003 (證券費) =  29.94 元

所以 20 X 2(買.賣) + 29.94 = 69.94 (四捨五入進位:70元)
以上就是演算法,請參考

2011年11月6日 星期日

乾巧人之星巴克買一送一個方法

乾巧人之星巴克買一送一個方法


星巴克到今年年底, 持iBon的票根, 就可以到星巴克買一送一
但沒有iBon的票根怎麼辦?!
最快的方法就是去7-11買張 台北->板橋的兒童高鐵票
這樣只要花購票$20元 + iBon手續費$10 = $30
7-11馬上會給你一張iBon的票
這張高鐵票當然不是要你去搭
直接拿這張票, 就可以在星巴克買一送一囉!
當然這是兩個人臨時想喝星巴克才會用到的方法
有計畫一點的, 就可以提早弄到一些搭過的高鐵票根
這樣連$30元都可以省下來了.

P.S. 帶著濕衛生紙, 等星巴克店員蓋完章, 就用力地給它擦掉,
       下次又是一尾活龍~ 乾巧+1

Constraints 約束條件 (PK.FK.UC)

NOT NULL 設定該欄立不可含Null 值
UNIQUE 設定一個或多個欄位組合,資料內容需唯一不可重覆
PRIMARY KEY 設定資料表格不可重覆、空白或為Null的主鍵值
FOREIGN KEY 設定該欄位值的存在必須關連並參照指定資料表格的欄位值
CHECK 設定需符合所列示的條件值

注意事項
所有的Constraints資料均會存放在系統資料表格(Data Dictionary)中。建立Constraint時若賦予有意義的名稱,會較易查核Constraint的資料。Constraint標準的命名方式,應加入物件名稱。若未定名,則Oracle會自動以SYS_Cn的唯一名稱為之命名。USER_CONSTRAINTS可查核所設定的 Constraintion資料。

設立Constraints
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],...
[table_constraint][,...]);
Schema:與資料表格擁有者相同的名稱。
Table:設定資料表格名稱。
DEFAULT expr:為欄位設定預設值。
Column:設定資料表格內的欄位名稱。
Datatype:設定欄位資料型態及長度。
Column_constraint:設定欄位層級的約束條件,以維護資料的完整性。
Table_constraint:設定資料表格層級的約束條件,以維護資料的完整性。
ex:
CREATE TABLE emp(
empno NUMBER(4),
ename VARCHAR2(10),...
deptno NUMBER(7,2) NOT NULL,
CONSTRAINT emp_empno_pk
PRIMARY KEY (EMPNO));

建立 Constraints 的層級
欄位層級的 constraint
column [CONSTRAINT constraint_name] constraint_type,
資料表格層級的 constraint
column,...[CONSTRAINT constraint_name] constraint_type(column, ...),
Column 單一欄位的參照設定,可定義任何型態的Constraint。
Table 一個或多個欄位的參照設定,可定義除了NOT NULL以外的,任何型態Constraint。

NOT NULL Constraint的用途
新增資料時,Oracle會對不給值的欄位,預設填入Null值。若確保該欄位值不可為Null值,需於該欄位設定NOT NULL的Constraint條件,當資料異動時,即可自動執行資料內容檢核的動作。
ex:
..deptno NUMBER(7,2)
CONSTRAINT emp_deptno_nn NOT NULL…..

使用 UNIQUE Constraint
為一個或組合性的欄位,設立UNIQUE Constraints可確保一個或組合性的欄位值的資料唯一。為一個欄立設立UNIQUE Constraint時,可接受Null值。
ex:
CREATE TABLE dept(
deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE(dname));
設立UNIQUE Constraint時,Oracle 會隱含式自動為所設立的欄位,建置Unique Index的索引檔。

PRIMARY KEYConstraint
每一個資料表格,僅能擁有一個PRIMARY KEY的Constraints,建立主鍵值。PRIMARY KEY可以是一個欄位或組合式欄位,其欄位值必須唯一且不可含Null值。
ex:
CREATE TABLE dept(
deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE (dname),
CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno));
設立PRIMARY KEY Constraint時,Oracle 會隱含式自動為所設立的欄位,建置Unique Index的索引檔。

FOREIGN KEYConstraint
FOREIGN KEY是維護資料庫資料完整性的Constraint。以FOREIGN KEY偵測一個或組合式欄位,與自有的或其他資料表格的PRIMARY KEY或UNIQUE Constraint欄位建立資料關連。如主檔與明細檔(父子檔)間的關連。單一的 FOREIGN KEY欄位,可接受Null值。設有FOREIGN KEY Constraint條件的欄位值(子檔),必須參照並符合被參照檔(父檔),已存在的欄位值。
ex:
CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno) REFERENCES dept (deptno));
FOREIGN KEY要設定前,應先確定所要參照的PRIMARY KEY 或 UNIQUE 已事先設置完成,可供參照。

FOREIGN KEY 的保留字
FOREIGN KEY定義於子檔中,且子檔含有可參照父檔的關連欄位。
FOREIGN KEY的設定,由下列保留字所組成:
FOREIGN KEY:於子檔設定可關連參照的欄位。
REFERENCES:用以指定所參照的資料表格名稱及欄位名稱。
ON DELETE CASCADE:設定當父檔的資料刪除時,子檔中相關連的明細資料,亦會一併被刪除。

若未設定ON DELETE CASCADE,在刪除父檔的資料時,若子檔仍有相關連的明細資料存在,會產生錯誤訊息。

CHECK Constraint
若以CHECK Constraint為欄位設定列示值條件,資料表格中的每一筆資料列,均需符合所列示的限制條件。一個欄位,可設定多個CHECK Constraint列示條件,衹要邏輯條件不衝突,CHECK Constraint 的個數不限。CHECK Constraint,可設立於資料表格或欄位層級。
ex:
CONSTRAINT emp_deptno_ck
CHECK (DEPTNO BETWEEN 10 AND 99),...
每一資料列的資料內容,均需滿足檢核條件
不可做為檢核條件的表述句:
參照 CURRVAL, NEXTVAL, LEVEL, 及 ROWNUM 等虛擬欄位名稱呼叫 SYSDATE, UID, USER, 及 USERENV 等函數使用
以其它資料列的資料內容做為檢核條件

新增Constraints
於資料表格建置完成後,可使用ALTER TABLE..ADD方式新增Constraint。
Table:設定資料表格名稱。
Constraint:Constraint的保留字及所指定的Constraint名稱。
Type:設定所要新增的Constraint 種類。
Column:設定Constraint運作的欄位名稱。
ALTER TABLE table
ADD [CONSTRAINT constraint] type (column);
Constraint可以新增、刪除、啟動或關閉,但不能更改其架構。
欲在已建置完成的資料表格,新增NOT NULL Constraint時,需於 ALTER TABLE 指令中,使用 MODIFY子句,否則無法設立。新增NOT NULL Constraint 時,若資料表格中已有資料,Constraint會進行檢核,若已存在有Null值,設立Constraint時會產生錯誤訊息。
ex:
ALTER TABLE emp
ADD CONSTRAINT emp_mgr_fk
FOREIGN KEY(mgr) REFERENCES emp(empno);

刪除Constraints
刪除Constraint前,可先查核系統資料表格中的USER_CONSTRAINTS及USER_CONS_COLUMNS資料內容。確定需求後,再進行刪除作業。
ALTER TABLE table
DROP PRIMARY KEY | UNIQUE (column) |
CONSTRAINT constraint [CASCADE];

DROP指令,若使用CASCADE子句,可將有參照關連的Constraint一併刪除。

關閉Constraints
對於不想刪除再重建的Constraint,可使用ALTER TABLE..DISABLE指令,暫時性關閉Constraint的檢核作用。
ALTER TABLE emp
DISABLE CONSTRAINT
emp_empno_pk CASCADE;
DISABLE子句,可使用於CREATE TABLE 及ALTER TABLE語法中。
CASCADE子句,可同時關閉有參照關連的Constraint作用。

啟動Constraints
對於被設定為DISABLE的Constraint,可使用ALTER TABLE…..ENABLE指令,重新啟動Constraint的檢核作用。
ALTER TABLE table
ENABLE CONSTRAINT constraint;
啟動Constraint作用時,會對資料表格中的所有資料列,檢核欄位值的合理性,故已存在的資料內容,需符合Constraint 的檢核條件。
啟動UNIQUE或PRIMARY KEY的Constraint 時,Oralce會自動為所設定的欄位,建置一個Unique Index索引檔。
ENABLE子句,可使用於CREATE TABLE 及ALTER TABLE語法中。

查核Constraints資訊
資料表格建置完成後,若以DESC指令查驗資料表格的檔案結構,針對Constraint,衹能查看是否有NOT NULL的Constraint記錄。若要查看資料表格上的所有Constraint設定,可查核USER_CONSTRAINTS系統資料表格檔。若 Constraint設立之初,使用者未設定Constraint名稱,所查看到的會是系統所配置的系統名稱。

SELECT constraint_name,constraint_type,search_condition
FROM user_constraints
WHERE table_name = 'EMP';

USER_CONSTRAINT的Constraint Type欄位值定義:
P:Primary key。
R:Foreign key。
U:Unique。
C:Check 或 Not Null。

查核USER_CONS_COLUMNS
USER_CONS_COLUMNS系統資料表格,可查核Constraint所對應的欄位名稱。尤其是查核系統自動配置的系統名稱(SYS_Cn)所對應的欄位,非常有效。常與USER_CONSTRAINTS的查核,搭配使用。

ex:
SELECT constraint_name,column_name
FROM user_cons_columns
WHERE table_name = 'EMP';