① T-sql的基本語法
一:insert語句
into 關鍵字是可選的
values關鍵字前面的()是可選的,這里是要接收數據的列
values後面,有兩種方式提供值
1:顯式的給出值 2:從select語句中導出值
insert語句注意幾點
1:不要理標志列,系統會給你插入的
2:給出實際的值,如果沒有,那就null
3:給出默認的值,default關鍵字,告訴資料庫取默認值
insert into ... select
什麼時候會這么用,當成批的數據來自
1:資料庫中的另一個表
2:同一台伺服器完全不同的資料庫
3:另一個SQLSERVER的資料庫
4:來自同一個表中的數據
說實在的2和3我從來沒用過
好,看一個例子
declare @mytable table
(
id int,
sortid int
);
insert into @mytable (id,sortid) select id,classid from proct;
select * from @mytable;
注意我定義了一個表的對象
每一句之間是用分號隔開的
(id,sortid) 是可以忽略的
二:update語句
看例子
update e set e.flag = 'm' from employee e join contact ce on e.id = ce.employeeid where ce.name = 'jo'
這里用到了join子句,當然是可以用的
如果修改不止一列 只要加一個逗號
set num = num * 1.2當然可以寫表達式
三:delete語句
delete from actors from actors a left join film f on a.filmid = f.filmid where f.filmid is null
outer連接將在沒有匹配的一端返回null,
這里也就是film表沒有匹配的行是null
注意 is null 的寫法
四: select語句
這里還是不說了,還是多說說子句吧
五:where子句
1:
= > < >= <= <> != !> !<
其中<> 與 !=都是不相等的意思
!>與!<不怎麼常見,但仔細想想也沒什麼用處
2:
and or not
如果一個where子句中同時出現這三個操作符
最先評估not 然後是and 然後是or
3:
between 例子 between 1 and 5 這個就不多說了
4:
like 例子:like "xland%"
%和_是通配符
%代表零個或多個任意字元
_表示單個任意字元
把字元包括在方括弧中
[a-c]表示a b c都可行
[ab]表示a或b
^與not表示下一個字元將被排除掉
5:
in 例子 in ( 1,2,3) 這個也不多說了
六:order by子句
order by由於比較常用 我這里就不多說了
1:order by username 是可以識別中文的(sql先把中文轉換成拼音再進行排序)
2:可以對 查詢到的表中的任何列 進行排序 無論該列是否包含在select列表中
3:基於多個列的order by
例如:order by addtime,id
先按時間排序,再在這個基礎上根據id排序,你也看到了,性能是有很大幅度的降低的
七:distinct關鍵字
select count(distinct column) from table
檢索某一列不重復的記錄數
八:group by 聚集函數 和 having子句
先看例子:
select orderid sum(orderMoney) from sales where orderid between 3 and 123 group by orderid
注意這里的orderid在表裡是有可能重復的
這個語句的作用是檢索出orderid從3到123的記錄,
然後在這個記錄集合上 以orderid分組
把orderid相同的數據分到一組 (這一組就是最終結果的一條記錄)
然後通過sum函數把各組的orderMoney數據相加,
結果是最終結果的第二個欄位
我發現用group by子句基本上都是和聚集函數一起用的
舉幾個聚集函數的例子
sum 求和
avg求平均數
min/max求最大和最小值
count(表達式|*)獲取一個查詢中的行數
只說說count吧:
count(coloum)如果這一列有null,那麼這些null的行將不會計算在內
count(*)將得到表裡的所有行的數目
聚集函數不一定非和group by一起使用不可
(另外avg基本上都是和group by一起使用的)
having子句是在組上放置條件的
看例子
select orderid sum(orderMoney) from sales where orderid between 3 and 123 group by orderid having sum(orderMoney)>5
group by得到了一個記錄的集合
然後通過having子句,再在這個集合上做篩選
② SQL語句中INDEX函數
1。這是oracle語法
2。 /*+ INDEX(SLMS_TRALOG_T SLMS_TRALOG_CALLED_IDX ) */ 意思是,在這個查詢中使用SLMS_TRALOG_T表的SLMS_TRALOG_CALLED_IDX索引,當然後邊的where條件中會用到這個索引
補充一點,這個不叫INDEX函數,叫強制使用索引
③ sql常用語句,幫我歸納出來,謝謝
SQL語句先前寫的時候,很容易把一些特殊的用法忘記,我特此整理了一下SQL語句操作。
一、基礎
1、說明:創建資料庫
CREATE DATABASE database-name
2、說明:刪除資料庫
drop database dbname
3、說明:備份sql server
--- 創建 備份數據的 device
USE master
EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 開始 備份
BACKUP DATABASE pubs TO testBack
4、說明:創建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據已有的表創建新表:
A:create table tab_new like tab_old (使用舊表創建新表)
B:create table tab_new as select col1,col2... from tab_old definition only
5、說明:刪除新表
drop table tabname
6、說明:增加一個列
Alter table tabname add column col type
註:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加varchar類型的長度。
7、說明:添加主鍵: Alter table tabname add primary key(col)
說明:刪除主鍵: Alter table tabname drop primary key(col)
8、說明:創建索引:create [unique] index idxname on tabname(col....)
刪除索引:drop index idxname
註:索引是不可更改的,想更改必須刪除重新建。
9、說明:創建視圖:create view viewname as select statement
刪除視圖:drop view viewname
10、說明:幾個簡單的基本的sql語句
選擇:select * from table1 where 范圍
插入:insert into table1(field1,field2) values(value1,value2)
刪除:delete from table1 where 范圍
更新:update table1 set field1=value1 where 范圍
查找:select * from table1 where field1 like '%value1%' ---like的語法很精妙,查資料!
排序:select * from table1 order by field1,field2 [desc]
總數:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、說明:幾個高級查詢運算詞
A: UNION 運算符
UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。
C: INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重復行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。
註:使用運算詞的幾個查詢結果行必須是一致的。
12、說明:使用外連接
A、left outer join:
左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full outer join:
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。
二、提升
1、說明:復製表(只復制結構,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、說明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、說明:跨資料庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)
insert into b(a, b, c) select d,e,f from b in '具體資料庫' where 條件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、說明:子查詢(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、說明:顯示文章、提交人和最後回復時間
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、說明:外連接查詢(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、說明:在線視圖查詢(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、說明:between的用法,between限制查詢數據范圍時包括了邊界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 數值1 and 數值2
9、說明:in 的使用方法
select * from table1 where a [not] in ('值1','值2','值4','值6')
10、說明:兩張關聯表,刪除主表中已經在副表中沒有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、說明:四表聯查問題:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、說明:日程安排提前五分鍾提醒
SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5
13、說明:一條sql 語句搞定資料庫分頁
select top 10 b.* from (select top 20 主鍵欄位,排序欄位 from 表名 order by 排序欄位 desc) a,表名 b where b.主鍵欄位 = a.主鍵欄位 order by a.排序欄位
14、說明:前10條記錄
select top 10 * form table1 where 范圍
15、說明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用於論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行並消除所有重復行而派生出一個結果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、說明:隨機取出10條數據
select top 10 * from tablename order by newid()
18、說明:隨機選擇記錄
select newid()
19、說明:刪除重復記錄
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、說明:列出資料庫里所有的表名
select name from sysobjects where type='U'
21、說明:列出表裡的所有的
select name from syscolumns where id=object_id('TableName')
22、說明:列示type、vender、pcs欄位,以type欄位排列,case可以方便地實現多重選擇,類似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
顯示結果:
type vender pcs
電腦 A 1
電腦 A 1
光碟 B 2
光碟 A 2
手機 B 3
手機 C 3
23、說明:初始化表table1
TRUNCATE TABLE table1
24、說明:選擇從10到15的記錄
select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc
三、技巧
1、1=1,1=2的使用,在SQL語句組合時用的較多
"where 1=1" 是表示選擇全部 "where 1=2"全部不選,
如:
if @strWhere !=''
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
end
else
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
end
我們可以直接寫成
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere
2、收縮資料庫
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收縮數據和日誌
DBCC SHRINKDB
DBCC SHRINKFILE
3、壓縮資料庫
dbcc shrinkdatabase(dbname)
4、轉移資料庫給新用戶以已存在用戶許可權
exec sp_change_users_login 'update_one','newname','oldname'
go
5、檢查備份集
RESTORE VERIFYONLY from disk='E:\dvbbs.bak'
6、修復資料庫
ALTER DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO
7、日誌清除
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE tablename -- 要操作的資料庫名
SELECT @LogicalFileName = 'tablename_log', -- 日誌文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1 -- 你想設定的日誌文件的大小(M)
-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)
DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill Log')
DELETE DummyTrans
SELECT @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF
8、說明:更改某個表
exec sp_changeobjectowner 'tablename','dbo'
9、存儲更改全部表
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS
DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)
DECLARE curObject CURSOR FOR
select 'Name' = name,
'Owner' = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
OPEN curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if @Owner=@OldOwner
begin
set @OwnerName = @OldOwner + '.' + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
-- select @name,@NewOwner,@OldOwner
FETCH NEXT FROM curObject INTO @Name, @Owner
END
close curObject
deallocate curObject
GO
10、SQL SERVER中直接循環寫入數據
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end
小記存儲過程中經常用到的本周,本月,本年函數
Dateadd(wk,datediff(wk,0,getdate()),-1)
Dateadd(wk,datediff(wk,0,getdate()),6)
Dateadd(mm,datediff(mm,0,getdate()),0)
Dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0))
Dateadd(yy,datediff(yy,0,getdate()),0)
Dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
上面的SQL代碼只是一個時間段
Dateadd(wk,datediff(wk,0,getdate()),-1)
Dateadd(wk,datediff(wk,0,getdate()),6)
就是表示本周時間段.
下面的SQL的條件部分,就是查詢時間段在本周范圍內的:
Where Time BETWEEN Dateadd(wk,datediff(wk,0,getdate()),-1) AND Dateadd(wk,datediff(wk,0,getdate()),6)
而在存儲過程中
select @begintime = Dateadd(wk,datediff(wk,0,getdate()),-1)
select @endtime = Dateadd(wk,datediff(wk,0,getdate()),6)
④ sql server的表函數怎麼調試
你好,
1.首先,sql裡面的函數是非常多的常用的有日期函數,字元函數等不知道你所說的是哪一種函數的調用。 2.就函數調用而言,是有很多的調用方法的,幾乎每個函數的調用方法和調用的意義都是不相同的。
3.舉例:比如 getdate() 這是一個函數,可以得到當年當月當日的系統時間精確到秒,如果你想查詢系統當前時間可一直在sql查詢編輯器中輸入: select getdate() 就可以了。
4.就sql函數的調用而言,可以在存儲過程中調用也可以在 T-SQL中調用。
希望對你有所幫助!
⑤ SQL Server中的時間函數有那些,最好舉例說明
比較常用的時間函數有DateAdd,DateDiff,DateName,DatePart,Day,Getdate,Month,Year,GetUTCDate這幾個函數。
以下依次說明,如需更詳細說明請參考SQL幫助文檔:
1. DateAdd函數
在向指定日期加上一段時間的基礎上,返回新的 datetime 值。
語法
DATEADD ( datepart , number, date )
示例
此示例列印出 pubs 資料庫中標題的時間結構的列表。此時間結構表示當前發布日期加上 21 天。
SELECT DATEADD(day, 21, pubdate) AS timeframe
FROM titles
2.DateDiff函數
返回跨兩個指定日期的日期和時間邊界數。
語法
DATEDIFF ( datepart , startdate , enddate )
示例
此示例確定在 pubs 資料庫中標題發布日期和當前日期間的天數。
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles
3.DateName函數
返回代表指定日期的指定日期部分的字元串。
語法
DATENAME ( datepart , date )
示例
此示例從 GETDATE 返回的日期中提取月份名。
SELECT DATENAME(month, getdate()) AS 'Month Name'
4.DatePart函數
返回代表指定日期的指定日期部分的整數。
語法
DATEPART ( datepart , date )
示例
此示例顯示 GETDATE 及 DATEPART 的輸出。
SELECT DATEPART(month, GETDATE()) AS 'Month Number'
5.Day函數
返回代表指定日期的天的日期部分的整數。
語法
DAY ( date )
示例
此示例返回從日期 03/12/1998 後的天數。
SELECT DAY('03/12/1998') AS 'Day Number'
6.GetDate函數
按 datetime 值的 Microsoft® SQL Server™ 標准內部格式返回當前系統日期和時間。
語法
GETDATE ( )
示例
下面的示例得出當前系統日期和時間:
SELECT GETDATE()
7.Month函數
返回代表指定日期月份的整數。
語法
MONTH ( date )
示例
下面的示例從日期 03/12/1998 中返回月份數。
SELECT "Month Number" = MONTH('03/12/1998')
8.Year函數
返回表示指定日期中的年份的整數。
語法
YEAR ( date )
示例
下例從日期 03/12/1998 中返回年份數。
SELECT "Year Number" = YEAR('03/12/1998')
9.GetUTCDate函數
返回表示當前 UTC 時間(世界時間坐標或格林尼治標准時間)的 datetime 值。當前的 UTC 時間得自當前的本地時間和運行 SQL Server 的計算機操作系統中的時區設置。
語法
GETUTCDATE()
示例
下例從日期 03/12/1998 中返回年份數。
SELECT GETUTCDATE()
⑥ t-sql支持的數據類型有哪些
一、 整數數據類型
整數數據類型是最常用的數據類型之一。
1、INT (INTEGER)
INT (或INTEGER)數據類型存儲從-2的31次方 (-2 ,147 ,483 ,648) 到2的31次方-1 (2 ,147 ,483,647) 之間的所有正負整數。每個INT 類型的數據按4 個位元組存儲,其中1 位表示整數值的正負號,其它31 位表示整數值的長度和大小。
2、SMALLINT
SMALLINT 數據類型存儲從-2的15次方( -32, 768) 到2的15次方-1( 32 ,767 )之間的所有正負整數。每個SMALLINT 類型的數據佔用2 個位元組的存儲空間,其中1 位表示整數值的正負號,其它15 位表示整數值的長度和大小。
3、TINYINT
TINYINT數據類型存儲從0 到255 之間的所有正整數。每個TINYINT類型的數據佔用1 個位元組的存儲空間。
4、BIGINT
BIGINT 數據類型存儲從-2^63 (-9 ,223, 372, 036, 854, 775, 807) 到2^63-1( 9, 223, 372, 036 ,854 ,775, 807) 之間的所有正負整數。每個BIGINT 類型的數據佔用8個位元組的存儲空間。
二、 浮點數據類型
浮點數據類型用於存儲十進制小數。浮點數值的數據在SQLServer中採用上舍入(Round up 或稱為只入不舍)方式進行存儲。所謂上舍入是指,當(且僅當)要舍入的數是一個非零數時,對其保留數字部分的最低有效位上的數值加1 ,並進行必要的進位。若一個數是上舍入數,其絕對值不會減少。如:對3.14159265358979 分別進行2 位和12位舍入,結果為3.15 和3.141592653590。
1、REAL 數據類型
REAL數據類型可精確到第7 位小數,其范圍為從-3.40E -38 到3.40E +38。 每個REAL類型的數據佔用4 個位元組的存儲空間。
2、FLOAT
FLOAT數據類型可精確到第15 位小數,其范圍為從-1.79E -308 到1.79E +308。 每個FLOAT 類型的數據佔用8 個位元組的存儲空間。 FLOAT數據類型可寫為FLOAT[ n ]的形式。n 指定FLOAT 數據的精度。n 為1到15 之間的整數值。當n 取1 到7 時,實際上是定義了一個REAL 類型的數據,系統用4 個位元組存儲它;當n 取8 到15 時,系統認為其是FLOAT 類型,用8 個位元組存儲它。
3、DECIMAL
DECIMAL數據類型可以提供小數所需要的實際存儲空間,但也有一定的限制,您可以用2 到17 個位元組來存儲從-10的38次方-1 到10的38次方-1 之間的數值。可將其寫為DECIMAL[ p [s] ]的形式,p 和s 確定了精確的比例和數位。其中p 表示可供存儲的值的總位數(不包括小數點),預設值為18; s 表示小數點後的位數,預設值為0。 例如:decimal (15 5),表示共有15 位數,其中整數10 位,小數5。 位表4-3 列出了各精確度所需的位元組數之間的關系。
4、NUMERIC
NUMERIC數據類型與DECIMAL數據類型完全相同。
注意:SQLServer為了和前端的開發工具配合,其所支持的數據精度默認最大為28位。
三、 二進制數據類型
1、BINARY
BINARY 數據類型用於存儲二進制數據。其定義形式為BINARY( n), n 表示數據的長度,取值為1 到8000 。在使用時必須指定BINARY 類型數據的大小,至少應為1 個位元組。BINARY 類型數據佔用n+4 個位元組的存儲空間。在輸入數據時必須在數據前加上字元「0X」 作為二進制標識,如:要輸入「abc 」則應輸入「0xabc 」。若輸入的數據過長將會截掉其超出部分。若輸入的數據位數為奇數,則會在起始符號「0X 」後添加一個0,如上述的「0xabc 」會被系統自動變為「0x0abc」。
2、VARBINARY
VARBINARY數據類型的定義形式為VARBINARY(n)。 它與BINARY 類型相似,n 的取值也為1 到8000, 若輸入的數據過長,將會截掉其超出部分。不同的是VARBINARY數據類型具有變動長度的特性,因為VARBINARY數據類型的存儲長度為實際數值長度+4個位元組。當BINARY數據類型允許NULL 值時,將被視為VARBINARY數據類型。
一般情況下,由於BINARY 數據類型長度固定,因此它比VARBINARY 類型的處理速度快。
四、 邏輯數據類型
BIT: BIT數據類型佔用1 個位元組的存儲空間,其值為0 或1 。如果輸入0 或1 以外的值,將被視為1。 BIT 類型不能定義為NULL 值(所謂NULL 值是指空值或無意義的值)。
五、 字元數據類型
字元數據類型是使用最多的數據類型。它可以用來存儲各種字母、數字元號、特殊符號。一般情況下,使用字元類型數據時須在其前後加上單引號』或雙引號」 。
1 CHAR
CHAR 數據類型的定義形式為CHAR[ (n) ]。 以CHAR 類型存儲的每個字元和符號佔一個位元組的存儲空間。n 表示所有字元所佔的存儲空間,n 的取值為1 到8000, 即可容納8000 個ANSI 字元。若不指定n 值,則系統默認值為1。 若輸入數據的字元數小於n,則系統自動在其後添加空格來填滿設定好的空間。若輸入的數據過長,將會截掉其超出部分。
2、NCHAR
NCHAR數據類型的定義形式為NCHAR[ (n) ]。 它與CHAR 類型相似。不同的是NCHAR數據類型n 的取值為1 到4000。 因為NCHAR 類型採用UNICODE 標准字元集(CharacterSet)。 UNICODE 標准規定每個字元佔用兩個位元組的存儲空間,所以它比非UNICODE 標準的數據類型多佔用一倍的存儲空間。使用UNICODE 標準的好處是因其使用兩個位元組做存儲單位,其一個存儲單位的容納量就大大增加了,可以將全世界的語言文字都囊括在內,在一個數據列中就可以同時出現中文、英文、法文、德文等,而不會出現編碼沖突。
3、VARCHAR
VARCHAR數據類型的定義形式為VARCHAR [ (n) ]。 它與CHAR 類型相似,n 的取值也為1 到8000, 若輸入的數據過長,將會截掉其超出部分。不同的是,VARCHAR數據類型具有變動長度的特性,因為VARCHAR數據類型的存儲長度為實際數值長度,若輸入數據的字元數小於n ,則系統不會在其後添加空格來填滿設定好的空間。
一般情況下,由於CHAR 數據類型長度固定,因此它比VARCHAR 類型的處理速度快。
4、NVARCHAR
NVARCHAR數據類型的定義形式為NVARCHAR[ (n) ]。 它與VARCHAR 類型相似。不同的是,NVARCHAR數據類型採用UNICODE 標准字元集(Character Set), n 的取值為1 到4000。
六、文本和圖形數據類型
這類數據類型用於存儲大量的字元或二進制數據。
1、TEXT
TEXT數據類型用於存儲大量文本數據,其容量理論上為1 到2的31次方-1 (2, 147, 483, 647)個位元組,在實際應用時需要視硬碟的存儲空間而定。
SQLServer2000以前的版本中,資料庫中一個TEXT 對象存儲的實際上是一個指針,它指向一個個以8KB (8192 個位元組)為單位的數據頁(Data Page)。 這些數據頁是動態增加並被邏輯鏈接起來的。在SQL Server 2000中,則將TEXT 和IMAGE 類型的數據直接存放到表的數據行中,而不是存放到不同的數據頁中。 這就減少了用於存儲TEXT 和IMA- GE 類型的空間,並相應減少了磁碟處理這類數據的I/O 數量。
2 NTEXT
NTEXT數據類型與TEXT.類型相似不同的,是NTEXT 類型採用UNICODE 標准字元集(Character Set), 因此其理論容量為230-1(1, 073, 741, 823)個位元組。
3 IMAGE
IMAGE數據類型用於存儲大量的二進制數據Binary Data。 其理論容量為2的31次方-1(2,147,483,647)個位元組。其存儲數據的模式與TEXT 數據類型相同。通常用來存儲圖形等OLE Object Linking and Embedding,對象連接和嵌入)對象。在輸入數據時同BINARY數據類型一樣,必須在數據前加上字元「0X」作為二進制標識
七、日期和時間數據類型
1 DATETIME
DATETIME 數據類型用於存儲日期和時間的結合體。它可以存儲從公元1753 年1 月1 日零時起到公元9999 年12 月31 日23 時59 分59 秒之間的所有日期和時間,其精確度可達三百分之一秒,即3.33 毫秒。DATETIME 數據類型所佔用的存儲空間為8 個位元組。其中前4 個位元組用於存儲1900 年1 月1 日以前或以後的天數,數值分正負,正數表示在此日期之後的日期,負數表示在此日期之前的日期。後4 個位元組用於存儲從此日零時起所指定的時間經過的毫秒數。如果在輸入數據時省略了時間部分,則系統將12:00:00:000AM作為時間預設值:如果省略了日期部分,則系統將1900 年1 月1 日作為日期預設值。
2 SMALLDATETIME
SMALLDATETIME 數據類型與DATETIME 數據類型相似,但其日期時間范圍較小,為從1900 年1 月1 日到2079 年6 月6:日精度較低,只能精確到分鍾,其分鍾個位上為根據秒數四捨五入的值,即以30 秒為界四捨五入。如:DATETIME 時間為14:38:30.283時SMALLDATETIME 認為是14:39:00 SMALLDATETIME 數據類型使用4 個位元組存儲數據。其中前2 個位元組存儲從基礎日期1900 年1 月1 日以來的天數,後兩個位元組存儲此日零時起所指定的時間經過的分鍾數。
八、 貨幣數據類型
貨幣數據類型用於存儲貨幣值。在使用貨幣數據類型時,應在數據前加上貨幣符號,系統才能辨識其為哪國的貨幣,如果不加貨幣符號,則默認為「¥」。各貨幣符號如圖4-2所示。
1 MONEY
MONEY 數據類型的數據是一個有4 位小數的DECIMAL 值,其取值從-2的63次方(-922,337,203,685,477.5808到2的63次方-1(+922,337,203,685,477.5807),數據精度為萬分之一貨幣單位。MONEY 數據類型使用8個位元組存儲。
2 SMALLMONEY
SMALLMONEY數據類型類似於MONEY 類型,但其存儲的貨幣值范圍比MONEY數據類型小,其取值從-214,748.3648到+214,748.3647,存儲空間為4 個位元組。
九、 特定數據類型
SQL Server 中包含了一些用於數據存儲的特殊數據類型。
1 TIMESTAMP
TIMESTAMP數據類型提供資料庫范圍內的惟一值此類型相當於BINARY8或VARBINARY(8),但當它所定義的列在更新或插入數據行時,此列的值會被自動更新,一個計數值將自動地添加到此TIMESTAMP數據列中。每個資料庫表中只能有一個TIMESTAMP數據列。如果建立一個名為「TIMESTAMP」的列,則該列的類型將被自動設為TIMESTAMP數據類型。
2 UNIQUEIDENTIFIER
UNIQUEIDENTIFIER 數據類型存儲一個16 位的二進制數字。此數字稱為(GUIDGlobally Unique Identifier ,即全球惟一鑒別號)。此數字由SQLServer 的NEWID函數產生的全球惟一的編碼,在全球各地的計算機經由此函數產生的數字不會相同。
十、 用戶自定義數據類型
SYSNAME SYSNAME 數據類型是系統提供給用戶的,便於用戶自定義數據類型。它被定義為NVARCHAR(128),即它可存儲128個UNICODE字元或256個一般字元。
以表格形式說明:
欄位類型 描述
bit 0或1的整型數字
int 從-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型數字
smallint 從-2^15(-32,768)到2^15(32,767)的整型數字
tinyint 從0到255的整型數字
decimal 從-10^38到10^38-1的定精度與有效位數的數字
numeric decimal的同義詞
money 從-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的貨幣數據,最小貨幣單位千分之十
smallmoney 從-214,748.3648到214,748.3647的貨幣數據,最小貨幣單位千分之十
float 從-1.79E+308到1.79E+308可變精度的數字
real 從-3.04E+38到3.04E+38可變精度的數字
datetime 從1753年1月1日到9999年12日31的日期和時間數據,最小時間單位為百分之三秒或3.33毫秒
smalldatetime 從1900年1月1日到2079年6月6日的日期和時間數據,最小時間單位為分鍾
timestamp 時間戳,一個資料庫寬度的唯一數字
uniqueidentifier 全球唯一標識符GUID
char 定長非Unicode的字元型數據,最大長度為8000
varchar 變長非Unicode的字元型數據,最大長度為8000
text 變長非Unicode的字元型數據,最大長度為2^31-1(2G)
nchar 定長Unicode的字元型數據,最大長度為8000
nvarchar 變長Unicode的字元型數據,最大長度為8000
ntext 變長Unicode的字元型數據,最大長度為2^31-1(2G)
binary 定長二進制數據,最大長度為8000
varbinary 變長二進制數據,最大長度為8000
image 變長二進制數據,最大長度為2^31-1(2G)
⑦ T-SQL中常用函數有哪幾大類每類寫出4-5個.
共七類:
1.數學函數:abs()、sign()、pi()、power()等。
2.統計函數:avg()、sum()、max()、min()等。
3.字元串函數:char()、space()、nchar()、len()等。
4.日期函數:getdate()、day()、month()、year()等。
5.系統函數:db_id()、file_id()、user_id()、user()等。
6.其他函數:textptr()、textvalid()、patindex()、cursor_status()等。
7.用戶自定義函數:
⑧ SQL資料庫常用命令及語法舉例
下面是一些常用的SQL語句,雖然很基礎,可是卻很值得收藏,對於初學者非常實用
⑨ T-sql函數問題
SQL 幫助
上面有函數,有例子。
-----------------
下面列出了一些常用的函數,學會這些SQL大部分的操作就不愁了。你可以在SQL幫助的索引中找這些函數,裡面有詳細解釋和實例。
數字
max
min
avg
sum
字元串
ltrim
rtrim
left
right
substring
charindex
replace
時間
getdate
year
month
day
datediff
類型轉換
cast
convert