(續(xù)前)SQLServer常見問題應對
2024-07-21 02:11:28
供稿:網(wǎng)友
(續(xù)前)sqlserver常見問題應對
版權(quán)所有©ashuixu轉(zhuǎn)載請保持完整并注明出處
sql語句部分
5、“令人頭疼”的日期處理
問題:你是否也有過面對日期處理時的彷徨無措么?
解答:你是否了解以下事實(摘選自sqlserver2000聯(lián)機幫助-datetime 數(shù)據(jù)類型:概述):
a.日期的存儲。
datetime
從 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和時間數(shù)據(jù),精確度為百分之三秒(等于 3.33 毫秒或 0.00333 秒)。如下表所示,把值調(diào)整到 .000、.003、或 .007 秒的增量。
smalldatetime
從 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和時間數(shù)據(jù)精確到分鐘。29.998 秒或更低的 smalldatetime 值向下舍入為最接近的分鐘,29.999 秒或更高的 smalldatetime 值向上舍入為最接近的分鐘。
microsoft sql server 用兩個 4 字節(jié)的整數(shù)內(nèi)部存儲 datetime 數(shù)據(jù)類型的值。第一個 4 字節(jié)存儲 base date(即 1900 年 1 月 1 日)之前或之后的天數(shù)。基礎日期是系統(tǒng)參考日期。不允許早于 1753 年 1 月 1 日的 datetime 值。另外一個 4 字節(jié)存儲以午夜后毫秒數(shù)所代表的每天的時間。
smalldatetime 數(shù)據(jù)類型存儲日期和每天的時間,但精確度低于 datetime。sql server 將 smalldatetime 的值存儲為兩個 2 字節(jié)的整數(shù)。第一個 2 字節(jié)存儲 1900 年 1 月 1 日后的天數(shù)。另外一個 2 字節(jié)存儲午夜后的分鐘數(shù)。日期范圍從1900 年 1 月 1 日到 2079 年 6 月 6 日,精確到分鐘。
b.沒有只存儲時間或日期的獨立的時間和日期數(shù)據(jù)類型。當設置 datetime 或 smalldatetime 值時,如果只指定時間,則日期默認為 1900 年 1 月 1 日。如果只指定日期,則時間默認為 12:00 am(午夜)。
c.下面是一些使用日期和時間數(shù)據(jù)的準則:
· 若要對日期和時間進行精確搜索匹配,請使用等號(=)。microsoft sql server 以 12:00:00:000 am(默認值)的精確時間形式返回年、月、日都完全匹配的日期和時間值。
· 若要搜尋日期或時間的一部分,請使用 like 運算符。sql server 首先把數(shù)據(jù)轉(zhuǎn)換為 datetime 格式然后再轉(zhuǎn)換為 varchar 格式。由于標準時間顯示格式不包括秒和毫秒,不能使用 like 和匹配模式對其搜索,除非使用 convert 函數(shù)并把 style 參數(shù)設為 9 或 109。有關(guān)部分日期和時間搜索的更多信息,請參見 like。
· sql server 在運行時計算 datetime 常量。用于某種語言期望的日期格式的日期字符串,如果由使用不同語言和日期格式設置的連接來執(zhí)行查詢,則可能無法識別。例如,下面的視圖對于語言設置為美國英語的連接可以工作正常,但對于其它語言設置的連接就不能工作正常:
create view usa_dates as
select *
from northwind.dbo.orders
where orderdate < 'may 1, 1997'
當在查詢中使用 datetime 常量,而且該查詢由使用不同語言設置的連接執(zhí)行時,需確保日期對于所有語言設置均是可以接受的。對于國際數(shù)據(jù)庫中永久對象中的 datetime 常量,比如表約束和查看 where 子句,必須同樣小心。有關(guān)所有語言設置都解釋為相同的日期格式的更多信息,請參見編寫國際 transact-sql 語句。
sql server 可以識別以下列格式括在單引號 (') 中的日期和時間:
· 字母日期格式(例如,'april 15, 1998')
· 數(shù)字日期格式(例如,'4/15/1998'、'april 15,1998')
· 未分隔的字符串格式(例如'19981207'、'december 12, 1998')
6、設計期無法確定的sql語句
問題:在寫存儲過程時,有些sql語句在設計期是不確定的,這樣的sql語句怎么寫呢?
解答:用系統(tǒng)存儲過程sp_executesql。
7、常用且重要函數(shù)、關(guān)鍵字和子句
a.case - 計算條件列表并返回多個可能結(jié)果表達式之一
b.isnull - 使用指定的替換值替換 null
c.having 子句 - 指定組或聚合的搜索條件。having 通常與 group by 子句一起使用。如果不使用 group by 子句,having 的行為與 where 子句一樣。