日期格式 代號
-------------------- -----------
04/05/2000 101
-------------------- -----------
2000.04.05 102
-------------------- -----------
05/04/2000 103
-------------------- -----------
05.04.2000 104
-------------------- -----------
05-04-2000 105
-------------------- -----------
05 Apr 2000 106
-------------------- -----------
Apr 05, 2000 107
-------------------- -----------
11:33:24 108
-------------------- -----------
Apr 5 2000 11:33:24 109
-------------------- -----------
04-05-2000 110
-------------------- -----------
2000/04/05 111
-------------------- -----------
20000405 112
SELECT convert(char,App_Date ,111) AS Expr1
FROM BC_MAINFORM
分享 ASP,ASP.NET,VB,C#,程式開發,網站設計,部落格,微網誌,網路行銷,facebook 行銷,噗浪行銷,社群行銷,電腦硬體軟體,網路賺錢等資訊內容。『噗落格』裡的文章大多是從各網站摘錄(轉貼)下來的,僅提供研究及筆記之用途,如有侵權請留言告知!一開始不打算賺錢,一個不可能中的可能
2009年4月25日 星期六
SELECT 自動加序號
SAMPLE 北風
select count(*) sn, a.CustomerID from Customers a , Customers b
where b.CustomerID <= a.CustomerID
group by a.CustomerID
order by a.customerid
Result:
sn CustomerID
----------- ----------
1 ALFKI
2 ANATR
3 ANTON
4 AROUT
5 BERGS
6 BLAUS
select count(*) sn, a.CustomerID from Customers a , Customers b
where b.CustomerID <= a.CustomerID
group by a.CustomerID
order by a.customerid
Result:
sn CustomerID
----------- ----------
1 ALFKI
2 ANATR
3 ANTON
4 AROUT
5 BERGS
6 BLAUS
計算年齡區段的人數SQL語法
先建立一個view(SQL)或檢視表(Access),參考這個SQL語法看看。
create view myview as
(
select 人數=count(*) from 會員資料表
where datediff(yy,出生日期,getdate()) <20
union
select 人數=count(*) from 會員資料表
where datediff(yy,出生日期,getdate()) >= 20 and datediff(yy,出生日期,getdate())&
lt;30
union
select 人數=count(*) from 會員資料表
where datediff(yy,出生日期,getdate()) >= 30 and datediff(yy,出生日期,getdate())&
lt;40
union
select 人數=count(*) from 會員資料表
where datediff(yy,出生日期,getdate()) >= 40 and datediff(yy,出生日期,getdate())&
lt;50
union
select 人數=count(*) from 會員資料表
where datediff(yy,出生日期,getdate()) >= 50 and datediff(yy,出生日期,getdate())&
lt;60
union
select 人數=count(*) from 會員資料表
where datediff(yy,出生日期,getdate()) >= 60
)
以後要查就用select * from myview就行了
create view myview as
(
select 人數=count(*) from 會員資料表
where datediff(yy,出生日期,getdate()) <20
union
select 人數=count(*) from 會員資料表
where datediff(yy,出生日期,getdate()) >= 20 and datediff(yy,出生日期,getdate())&
lt;30
union
select 人數=count(*) from 會員資料表
where datediff(yy,出生日期,getdate()) >= 30 and datediff(yy,出生日期,getdate())&
lt;40
union
select 人數=count(*) from 會員資料表
where datediff(yy,出生日期,getdate()) >= 40 and datediff(yy,出生日期,getdate())&
lt;50
union
select 人數=count(*) from 會員資料表
where datediff(yy,出生日期,getdate()) >= 50 and datediff(yy,出生日期,getdate())&
lt;60
union
select 人數=count(*) from 會員資料表
where datediff(yy,出生日期,getdate()) >= 60
)
以後要查就用select * from myview就行了
縮小MSSQL的日誌檔
如何縮小MSSQL的日誌檔已經是一個經常性的問題了,不過這個問題在精華區已經有不少答案了,我這裏也不再贅述。
現在我們討論一下治本的問題,即如何使日誌檔不再增大?
先介紹一個簡單的方法。
就是把資料庫的故障還原模型設置為“簡單”(SQL2K)。這樣它就會在Checkpoint的時候截斷日誌。
具體操作方法是:
1、在Enterprise Manager中右鍵點資料庫,“屬性|選項|故障還原”,選擇“簡單”就可以了,如果是SQL7,在“屬性|選項”中有一個“trunc. log on chkpt. ”,選中就可以了。
2、如果不想用Enterprise Manager,在Query Analyser或者isql裏面執行
EXEC sp_dboption 'your_dbname', 'trunc. log on chkpt.', 'TRUE'
就可以了
但是,要注意的是,這樣做了之後,雖然日誌不會增大,但是也意味著你一旦出現誤操作,將不會有利用日誌恢復的機會。(如何利用日誌來恢復請參見精華區的FAQ)
所以,絕對不建議在生產資料庫上截斷日誌,除非你有充足的理由和足夠的把握,或者……
承擔責任的不是你。
既然這種方法不安全,下面我將介紹一種安全的方法。
大家都知道,SQL Server 在完成事務日誌備份時將自動截斷事務日誌中的不活動部分。這些不活動的部分包含已完成的事務,因此在恢復過程中不再使用。相反,事務日誌的活動部分包含仍在運行但尚未完成的事務。SQL Server 將重新使用事務日誌中這些截斷的非活動空間,而不是任由事務日誌繼續增大並佔用更多的空間。
所以,我們備份事務日誌就可以使日誌檔不再增大了。
但是呢,日誌檔一直放著也不是個辦法,刪除呢,又會失去恢復的可能性。
我們可以結合完全備份來做。做過完全備份之前的事務日誌就可以刪除了。
比如說,一個備份計畫,每天一次完全備份,保留7天內的,每15分鐘一次事務日誌備份,保留2天的。
用資料庫維護計畫嚮導可以很方便的建立備份計畫,不過一定要記得設置保留多久的備份哦,否則硬碟空間被備份給占滿了就壞事了。
現在我們討論一下治本的問題,即如何使日誌檔不再增大?
先介紹一個簡單的方法。
就是把資料庫的故障還原模型設置為“簡單”(SQL2K)。這樣它就會在Checkpoint的時候截斷日誌。
具體操作方法是:
1、在Enterprise Manager中右鍵點資料庫,“屬性|選項|故障還原”,選擇“簡單”就可以了,如果是SQL7,在“屬性|選項”中有一個“trunc. log on chkpt. ”,選中就可以了。
2、如果不想用Enterprise Manager,在Query Analyser或者isql裏面執行
EXEC sp_dboption 'your_dbname', 'trunc. log on chkpt.', 'TRUE'
就可以了
但是,要注意的是,這樣做了之後,雖然日誌不會增大,但是也意味著你一旦出現誤操作,將不會有利用日誌恢復的機會。(如何利用日誌來恢復請參見精華區的FAQ)
所以,絕對不建議在生產資料庫上截斷日誌,除非你有充足的理由和足夠的把握,或者……
承擔責任的不是你。
既然這種方法不安全,下面我將介紹一種安全的方法。
大家都知道,SQL Server 在完成事務日誌備份時將自動截斷事務日誌中的不活動部分。這些不活動的部分包含已完成的事務,因此在恢復過程中不再使用。相反,事務日誌的活動部分包含仍在運行但尚未完成的事務。SQL Server 將重新使用事務日誌中這些截斷的非活動空間,而不是任由事務日誌繼續增大並佔用更多的空間。
所以,我們備份事務日誌就可以使日誌檔不再增大了。
但是呢,日誌檔一直放著也不是個辦法,刪除呢,又會失去恢復的可能性。
我們可以結合完全備份來做。做過完全備份之前的事務日誌就可以刪除了。
比如說,一個備份計畫,每天一次完全備份,保留7天內的,每15分鐘一次事務日誌備份,保留2天的。
用資料庫維護計畫嚮導可以很方便的建立備份計畫,不過一定要記得設置保留多久的備份哦,否則硬碟空間被備份給占滿了就壞事了。
SQL Server 中系統資料表的作用
sysaltfiles 主資料庫 保存資料庫的文件
syscharsets 主資料庫 字符集與排序順序
sysconfigures 主資料庫 配置選項
syscurconfigs 主資料庫 當前配置選項
sysdatabases 主資料庫 server中的資料庫
syslanguages 主資料庫 語言
syslogins 主資料庫 登入帳號信息
sysoledbusers 主資料庫 鏈結server登入訊息
sysprocesses 主資料庫 程序
sysremotelogins 主資料庫 遠端登入帳號
syscolumns 每個資料庫資料列
sysconstrains 每個資料庫 限制
sysfilegroups 每個資料庫 文件組
sysfiles 每個資料庫 文件
sysforeignkeys 每個資料庫 外部關鍵字
sysindexs 每個資料庫 索引
sysmenbers 每個資料庫 角色成員
sysobjects 每個資料庫 所有資料庫對象
syspermissions 每個資料庫 權限
systypes 每個資料庫 用户定義資料類型
sysusers 每個資料庫 用户
syscharsets 主資料庫 字符集與排序順序
sysconfigures 主資料庫 配置選項
syscurconfigs 主資料庫 當前配置選項
sysdatabases 主資料庫 server中的資料庫
syslanguages 主資料庫 語言
syslogins 主資料庫 登入帳號信息
sysoledbusers 主資料庫 鏈結server登入訊息
sysprocesses 主資料庫 程序
sysremotelogins 主資料庫 遠端登入帳號
syscolumns 每個資料庫資料列
sysconstrains 每個資料庫 限制
sysfilegroups 每個資料庫 文件組
sysfiles 每個資料庫 文件
sysforeignkeys 每個資料庫 外部關鍵字
sysindexs 每個資料庫 索引
sysmenbers 每個資料庫 角色成員
sysobjects 每個資料庫 所有資料庫對象
syspermissions 每個資料庫 權限
systypes 每個資料庫 用户定義資料類型
sysusers 每個資料庫 用户
將辨識欄位重新編號
一般我們都會使用Drop Table的方式先將整個Table刪除後再Create 相同名稱的Table來解決,不過這牽扯到程式開發者或是程式在執行時對於資料庫是否有Drop Table或是Create Table的問題,這時你可以使用SQL Server 2000 內建的功能來對重新起始你的資料表的辨識欄位值,如下:
方法一、
TRUNCATE TABLE [myTable]
myTable 是你的資料表名稱;
方法二、
1. DELETE [myTable]
2. DBCC CHECKIDENT('myTable', RESEED, 0)
myTable 是你的資料表名稱; RESEED 為重新編號的參數; 0 為由 1 開始編號。
不過(方法二)要注意的是你最好先將原資料表的資料完全刪除號再讓他幫你重新編號,不然不管你的資料辨識欄位是設定『不可重複』時,他一樣會從 1 開始編號,所以有可能會造成原本設計此欄位時『唯一性』的目的而產生編號重複的問題,因此建議避免此情況發生。
另外你也可以使用 DBCC CHECKIDENT('myTable', RESEED, 99)讓辨識欄位值由100開始編號。
方法一、
TRUNCATE TABLE [myTable]
myTable 是你的資料表名稱;
方法二、
1. DELETE [myTable]
2. DBCC CHECKIDENT('myTable', RESEED, 0)
myTable 是你的資料表名稱; RESEED 為重新編號的參數; 0 為由 1 開始編號。
不過(方法二)要注意的是你最好先將原資料表的資料完全刪除號再讓他幫你重新編號,不然不管你的資料辨識欄位是設定『不可重複』時,他一樣會從 1 開始編號,所以有可能會造成原本設計此欄位時『唯一性』的目的而產生編號重複的問題,因此建議避免此情況發生。
另外你也可以使用 DBCC CHECKIDENT('myTable', RESEED, 99)讓辨識欄位值由100開始編號。
找出欄位值重覆的記錄
最簡單的做法就是利用 Group By
如果要去除掉 Table (A) 裡面的重覆欄位記錄,有二種方法:
(第一種)
先把重覆的資料利用 Subquery Inert 到另一個 Table (B) ,刪掉 Table (A) 的重覆記錄後,再把 Table (B) 的資料插入 Table (A) 來。
(第二種)
先把重覆的資料利用 Subquery Inert 到另一個 Table (B),再把非重覆的資料Subquery Inert 到同一個 Table (B),最後把 Table (A) 殺了,用 Table (B) 取代 Table (A)。
如果要去除掉 Table (A) 裡面的重覆欄位記錄,有二種方法:
(第一種)
先把重覆的資料利用 Subquery Inert 到另一個 Table (B) ,刪掉 Table (A) 的重覆記錄後,再把 Table (B) 的資料插入 Table (A) 來。
(第二種)
先把重覆的資料利用 Subquery Inert 到另一個 Table (B),再把非重覆的資料Subquery Inert 到同一個 Table (B),最後把 Table (A) 殺了,用 Table (B) 取代 Table (A)。
訂閱:
文章 (Atom)