欄位型別分類
欄位分類
欄位型別一般可分為以下幾種
欄位分類
- 文字 型別
- 數字 型別
- 日期 型別
欄位分類明細列表
欄位型別分類
| 文字型別 | 數值型別 (整數) | 數值型別 (小數) | 日期型別 |
|---|---|---|---|
| char | bit | decimal | date |
| varchar | int | numberic | time |
| nvarchar | smallint | … | datetime |
| … | bigint | … | |
| real | |||
| currency | |||
| float | |||
| … |
文字欄位型別
-
文字欄位型別分類
欄位分類明細列表
關鍵字 自動補空白 多國語系 Char會 不支援 Var不會 不支援 N-支援 Char型別範例

Varchar型別範例


NVarChar型別範例

-
文字欄位型別長度設定
文字欄位型別長度設定
1.小於等於50,則等於50
2.大於50,則等於250
3.無法預估,則MAX

數值欄位型別
-
數值欄位型別分類
類型 型別 布林值 bit整數 int小數 decimal(18,4) -
數值型別範圍
資料類型 範圍 儲存體 bit0到1(字串值TRUE和FALSE可以轉換成bit值:TRUE會轉換成1,FALSE則轉換成0)1位元組bigint-2^63 (-9,223,372,036,854,775,808)到2^63-1 (9,223,372,036,854,775,807)8個位元組int-2^31(-2,147,483,648)到2^31-1 (2,147,483,647)4個位元組smallint-2^15 (-32,768)到2^15-1 (32,767)2位元組tinyint0至2551位元組float-1.79E+308到-2.23E-308、0及2.23E-308到1.79E+308這會隨著 n的值而不同real-3.40E+38到-1.18E-38、0及1.18E-38到 `3.40E+384個位元組money-922,337,203,685,477.5808到922,337,203,685,477.58078個位元組smallmoney- 214、748.3648到214、748.36474個位元組decimal(p,s)固定有效位數和小數位數的數字。 當使用最大有效位數時,有效的值是從 - 10^38 +1到10^38 - 1。decimal的ISO同義字為dec及dec(p, s)。numeric在功能上與decimal相同。p(有效位數) 要儲存的最大小數位數總數。 此數目包括小數點的左右兩側。 有效位數必須是從1到最大有效位數38的值。 預設有效位數是18。點提示
decimal(7,2) = 99999.99 -
數值長度設定
數值長度設定
int: 固定,不用設定
bit: 固定,不用設定
decimal:18,4 -
日期型別
-
日期欄位型別分類
日期欄位型別分類
類型 型別 日期 date時間 time日期時間 datetime日期時間(大範圍) datetime2日期時間(簡單型) smalldatetime時間戳記 timestamp -
日期型別範圍
日期型別範圍
資料類型 位元組 資料範圍 timestamp8位元組 (Byte)8Bytes 的16進位值datetime8位元組(字元長度最小19個位置,最大23個位置)1753年1月1日到9999年12月31日 時間範圍00:00:00到23:59:59.997 2012-06-30 06:30:02.612datetime2(n)6個位元組代表有效位數小於3,而7個位元組則代表有效位數是3和4。所有其他有效位數則需要8個位元組西元 1年1月1日到西元9999年12月31日 時間範圍00:00:00到3:59:59.9999999 2012-06-30 06:30:02.612smalldatetime4位元組 (Byte)1900:01:01到2079:06:061900年1月1日到2079年6月6日 2012-09-23 17:23datetimeoffset(n)10 Bytes(固定)預設值 最小26位數 (YYYY-MM-DD hh:mm:ss {+/-}hh:mm) 最大34位數(YYYY-MM-DD hh:mm:ss. nnnnnnn {+/-}hh:mm)0001-01-01到9999-12-31西元1年1月1日到西元9999年12月3重點提示
- 大部份情形使用
date型別(特別是需要用於統計的欄位) - 需要記錄時間時再增加一欄
datetime型別欄位
- 大部份情形使用
-
DateTime與DateTime2
SQL Server日期時間我們很常看到使用datetime,如果沒有特殊理由,建議使用datetime2。datetime2 優點
1.符合ANSI或ISO 8601標準
2.資料精準度100 nano second,比datetime更高精準度(3位小數)
3.儲存大小不到3個有效位數為6個位元組,
4.比使用datetime相同小數位數的所需儲存容量更小
5.使用者可指定精準度
6.日期時間範圍更大DateTime與DateTime2之間的主要差異如下表所示比較值 DateTimeDateTime2句法 DateTimeDateTime2[(n)]其中n是從0到7的小數秒精度格式 年-月-日 時:分:秒.nnn YYYY-MM-DD時:分:秒[.n]日期範圍 1753年1月1日至9999年12月31日通過 9999-12-31時間範圍 00:00:00至23:59:59.99700:00:00至23:59:59.9999999用法 聲明 @MyDatetime日期時間聲明 @MyDatetime2 datetime2(7)小數秒範圍 零到三位數字(範圍從 0到999)表示秒的小數部分。0到9999999之間的零到七位數字表示秒的小數部分準確性 四捨五入到 0.000、0.003或0.007秒的增量100納秒預設值 1900-01-01 00:00:001900-01-01 00:00:00字元長度 最少 19個位置,最多23個位置最少 19個位置,最多27個位置使用者定義的小數秒精度 不 是的 儲存大小 8位元組精度小於 3時為6個位元組。符合 ANSI和ISO 8601標準不 是的 實例比較
開啟SSMS新查詢,輸入以下指令DECLARE @dateTime2 datetime2(7) DECLARE @dateTime datetime SET @dateTime2 = '2000-12-31 10:30:30.5555555' SET @dateTime = @dateTime2 SELECT 'datetime2'=@dateTime2 , 'datetime'=@dateTime執行結果

-
資料範例
問題:從
2022/01/01-2022/01/06客戶銷貨總額為多少?

答案:
10+40+50= 100萬 # 200萬

原因:查詢範圍不正確

-
程式設計對應
-
SQL Server資料類型對應
SQL Server和.NET Framework是以不同的型別系統為基礎。 例如,.NET Framework Decimal結構的最大小數點位數為28,而SQL Server decimal和numeric資料型別的最大小數點位數為38。 為了在讀取和寫入資料時維持資料完整性,SqlDataReader會公開SQL Server特定的具型別存取子方法,這些方法會傳回的System.Data.SqlTypes物件以及傳回.NET Framework類型的存取子方法。SQL Server型別和.NET Framework型別也會由DbType和SqlDbType類別 (Class) 中的列舉型別 (Enumeration) 表示,而且您可以在指定SqlParameter資料型別時使用這些類別。下表顯示推斷的
.NET Framework類型、DbType與SqlDbType列舉,以及SqlDataReader的存取子方法。 -
對照表
SQL Server Database Engine類型.NET Framework類型SqlDbType列舉型別DbType列舉型別BIGINTInt64BigIntInt64BINARYByte[]VarBinaryBinarybitBooleanBitBooleancharStringCharAnsiStringFixedLengthChar[]Stringdate1DatetimeDateDateDateDate(SQL Server 2008 及以後版本)DatetimeDatetimeDateTimeDateTimedatetime2DatetimeDateTime2DateTime2( SQL Server 2008及以後版本)datetimeoffsetDateTimeOffsetDateTimeOffsetDateTimeOffset( SQL Server 2008及以後版本)decimalDecimalDecimalDecimalFILESTREAM attribute (varbinary(max))Byte[]VarBinaryBinaryFLOATDoubleFloatDoubleimageByte[]BinaryBinaryintInt32IntInt32moneyDecimalMoneyDecimalNCHARStringNCharStringFixedLengthChar[]ntextStringNTextStringChar[]NUMERICDecimalDecimalDecimalNVARCHARStringNVarCharStringChar[]realSingleRealSinglerowversionByte[]TimestampBinarysmalldatetimeDatetimeDateTimeDateTimeSMALLINTInt16SmallIntInt16SMALLMONEYDecimalSmallMoneyDecimalsql_variantObject 2VariantObjecttextStringTextStringChar[]timeTimeSpanTimeTime( SQL Server 2008及以後版本)timestampByte[]TimestampBinaryTINYINTByteTinyIntByteUNIQUEIDENTIFIERGuidUniqueIdentifierGuidvarbinaryByte[]VarBinaryBinaryvarcharStringVarCharAnsiString, StringChar[]xmlXmlXmlXml