在 MS SQL 中,空白字元在【某些的字串函數或比較式】執行結果會與預期的不一樣,例如

Sample 1:


    IF ( '  ' = ''  )  -- 一個是兩個空白,一個是空字串
        print '相等'
    else
        print '不相等';

    執行結果是]  ==>  相等


Sample 2:

    print Len('  ')   --  結果等於 0


Sample 3:

    print Len('123  ')   --  結果等於 3  Len 函數會自動將字尾的空白去掉


Sample 4:

    print Len('  123')   --  結果等於 5


Q: 那如果要真的求出字串 '123  ' ,長度為 5 ,指令該用什麼??  
==> A: 後面有空白的字元長度,要求出實際長度,不可以使用 Len ,要使用 DataLength  ==> 這是求出【位元組】的長度


※特別注意:
DataLength 是求出位元組,所以

  • 當碰上中文字時,每一個字的長度皆為 2
  • 當型態為:nvarchar、nchar 時,不管英文、符號,長度皆為 2
    當型態為:varchar、char  時,英文、符號的長度皆為 1


範例如下

Declare @sWideString nvarchar(20)  -- Unicode
Declare @sString  varchar(20)   -- 一般字元

Set @sWideString = '我是中文字加 ABC   '
Set @sString = '我是中文字加 ABC   '

print Len(@sWideString)  -- 長度 10  (因為 Len 指令會將尾端的空白去掉)
print Len(@sString)      -- 長度 10  (因為 Len 指令會將尾端的空白去掉)

print DataLength(@sWideString)  -- 長度 26
print DataLength(@sString)      -- 長度 19

joomy 發表在 痞客邦 留言(0) 人氣()

如果用平常的磁碟重組方式,沒有辦法做到排程的方式

但在XP之後MicroSoft有內建一個工具 Defrag.exe

使用方法如下

Windows Disk Defragmenter
Copyright (c) 2001 Microsoft Corp. and Executive Software International, Inc.
使用方法:
Defrag.exe <volume> [-a] [-f] [-v] [-?]
volume  磁碟機代號或掛接點 (d: 或 d:\vol\mountpoint)
  -a      只分析
  -f      即使可用空間太低也要強制磁碟重組。
  -v      詳細資訊輸出
  -?      顯示這個說明文字。



把它加入排程去執行就可以了

joomy 發表在 痞客邦 留言(0) 人氣()

var gsAgentLogo:String;

//宣告監聽程式
var LoadListener:Object = new Object();
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(LoadListener);

//載入完成時呼叫
LoadListener.onLoadComplete = function(target_mc:MovieClip):Void  {
     target_mc.gotoAndStop(gsAgentLogo);
};

_root.createEmptyMovieClip("logo", 1);
mcLoader.loadClip(sAgentFile, logo);

joomy 發表在 痞客邦 留言(0) 人氣()

import flash.external.*;

var gsAgentLogo:String;
ExternalInterface.addCallback("CallLoadAgentLogo", this, LoadAgentLogo);
function LoadAgentLogo(sAgentFile, sGotoLabel:String) {
     mcLoader.loadClip(sAgentFile, logo);
     gsAgentLogo = sGotoLabel;
}

_root.createEmptyMovieClip("logo", 1);

joomy 發表在 痞客邦 留言(0) 人氣()

一、取整數
◆ SQL

--两个整数相除将截断小数部分
select 3/4,4/3,5/3, 20/3
--结果 0,1,1,6

--返回大于或等于所给数字表达式的最小整数
SELECT CEILING(123.55), CEILING(123.45),CEILING(-123.45), CEILING(0.0)
--结果 124,124,-123,0

---四舍五入 round(a,b) -- 结果a 精确到小数点右 b位,或是左 -b位
select round(54.36,-2), round(54.36,-1),round(54.36,0), round(54.36,1),round(54.36,2)
--结果 100.00,50.00,54.00,54.40,54.36

---四舍五入 并转化为 整数
select cast(round(56.361,0) as int),cast(round(56.561,0) as int)
--结果 56,57

--举例使用

---两个整数相除 舍弃小数部分( 全部都向前进位)
declare @dividend decimal(20,2), @divisor decimal(20,2)

set @dividend=3
set @divisor=4
select CEILING(@dividend/@divisor)
--结果 1

set @dividend=4
set @divisor=3
select CEILING(@dividend/@divisor)
--结果 2

set @dividend=5
set @divisor=3
select CEILING(@dividend/@divisor)
--结果 2

---两个整数相除 四舍五入到整数
set @dividend=3
set @divisor=4
select cast(round(@dividend/@divisor,0) as int)
--结果 1

set @dividend=4
set @divisor=3
select cast(round(@dividend/@divisor,0) as int)
--结果 1

set @dividend=5
set @divisor=3
select cast(round(@dividend/@divisor,0) as int)
--结果 2


◆ ACCESS
1.再請問為何問題1中, 229.5\8.5 會等於28,而不是27,明明是整除啊?是什麼原因造成這項差異呢?
2.我試過將二者各乘以10,即 2295\85,答案則為27,如果我的被除數確定在小數點3位數以內,那是否可如法泡製,將被除數及除數各乘1000,變成整數後,再作整數除法"﹨"?
==>
在執行整數除法運算之前,這種數值運算式必須是 Byte、Integer 或是 Long運算式(都是整數的),任何的小數部分都會被刪除。所以運算式會變成 229\8 =28



二、取餘數

 ◆SQL
1. 取餘數 229 % 10 = 9

joomy 發表在 痞客邦 留言(0) 人氣()