熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

SQL數據操作基礎(中級)10

2013-11-15 14:39:34  來源: SQL Server 

  操作日期和時間
  
  日期和時間函數對建立一個站點是非常有用的站點的主人往往對一個表中的數據何時被更新感興趣通過日期和時間函數你可以在毫秒級跟蹤一個表的改變
  
  返回當前日期和時間
  
  通過函數GETDATE()你可以獲得當前的日期和時間例如語句SELECT GETDATE()返回如下的結果
  
  ……………………………
  
  NOV :AM
  
  ( row(s) affected)
  
  顯然如果你將來使用這個函數你得到的日期將比這個時間晚或者梗早
  
  函數GETDATE()可以用來作為DATEDIME()型字段的缺省值這對插入記錄時保存當時的時間是有用的例如假設有一個表用來保存你站點上的活動日志每當有一個訪問者訪問到你的站點時就在表中添加一條新記錄記下訪問者的名字活動和進行訪問的時間要建立一個表其中的記錄包含有當前的日期和時間可以添加一個DATETIME型字段指定其缺省值為函數GETDATE()的返回值就象這樣
  
  CREATE TABLE site_log (
  
  username VARCHAR()
  
  useractivity VARCHAR()
  
  entrydate DATETIME DEFAULT GETDATE())
  
  轉換日期和時間
  
  你也許已經注意到在上一節的例子中函數GETDATE()的返回值在顯示時只顯示到秒實際上SQL Sever內部時間可以精確到毫秒級(確切地說可以精確到毫秒)
  
  要得到不同格式的日期和時間你需要使用函數CONVERT()例如當下面的這個語句執行時顯示的時間將包括毫秒
  
  SELECT CONVERT(VARCHAR()GETDATE())
  
  注意例子中數字的使用這個數字指明了在顯示日期和時間時使用哪種日期和時間格式當這個語句執行時將顯示如下的日期和時間
  
  …………………………………
  
  Nov :::AM
  
  ( row(s) affected)
  
  在函數CONVERT()中你可以使用許多種不同風格的日期和時間格式顯示了所有的格式
  
  表 日期和時間的類型
  
  類型值 標准 輸出
  
   Default mon dd yyyy hh:miAM
  
   USA mm/dd/yy
  
   ANSI yymmdd
  
   British/French dd/mm/yy
  
   German ddmmyy
  
   Italian ddmmyy
  
   dd mon yy
  
   mon ddyy
  
   hh:mi:ss
  
  Default + millisecondsmon dd yyyy
  hh:mi:ss:mmmAM(or )
  
   USA mmddyy
  
   JAPAN yy/mm/dd
  
   ISO yymmdd
  
   Europe Default + millisecondsdd mon yyyy
  
  hh:mi:ss:mmm(h)
  
   hh:mi:ss:mmm(h)
  
  類型總是返回四位的年對其它類型要顯示世紀把style值加上類型返回小時時鐘的時間類型返回的月份用三位字符表示(用Nov代表November)
  
  對表中所列的每一種格式你可以把類型值加上來顯示有世紀的年(例如年將顯示為年)例如要按日本標准顯示日期包括世紀你應使用如下的語句
  
  SELECT CONVERT(VARCHAR(GETDATE()
  
  在這個例子中函數CONVERT()把日期格式進行轉換顯示為//
  
  抽取日期和時間
  
  在許多情況下你也許只想得到日期和時間的一部分而不是完整的日期和時間例如假設你想列出你的站點目錄中每個站點被查詢的月份這時你不希望完整的日期和時間把網頁弄亂為了抽取日期的特定部分你可以使用函數DATEPART()象這樣
  
  SELECT site_name Site Name
  
  DATEPART(mmsite_entrydate) Month Posted FROM site_directory
  
  函數DATEPART()的參數是兩個變量第一個變量指定要抽取日期的哪一部分第二個變量是實際的數據在這個例子中函數DATEPART()抽取月份因為mm代表月份下面是這個SELECT 語句的輸出結果
  
  Site Name Month Posted
  
  ………………………………………………………………
  
  Yahoo
  
  Microsoft
  
  Magicw
  
  ( row(s) affected)
  
  Month Posted列顯示了每個站點被查詢的月份函數DATEPART()的返回值是一個整數你可以用這個函數抽取日期的各個不同部分如表所示
  
  表 日期的各部分及其簡寫
  
  日期部分 簡寫 值
  
  year yy
  
  quarter qq
  
  month mm
  
  day of year dy
  
  day dd
  
  week wk
  
  weekday dw (SundaySaturday)
  
  hour hh
  
  minute mi
  
  second ss
  
  milisecond ms
  
  當你需要進行日期和時間的比較時使用函數DATEPART()返回整數是有用的但是上例中的查詢結果()不是十分易讀要以更易讀的格式得到部分的日期和時間你可以使用函數DATENAME()如下例所示
  
  SELECT site_name Site Name
  
  DATENAME(mmsite_entrydate) Month Posted
  
  FROM site_directory
  
  函數DATENAME()和函數DATEPART()接收同樣的參數但是它的返回值是一個字符串而不是一個整數下面是上例該用DATENAME()得到的結果
  
  Site Name Month Postec
  
  …………………………………………………………………
  
  Yahoo February
  
  Microsoft June
  
  Magicw June
  
  ( row(s) affected)
  
  你也可以用函數DATENAE()來抽取一個星期中的某一天下面的這個例子同時抽取一周中的某一天和日期中的月份
  
  SELECT site_name Site Name
  
  DATENAME(dwsite_entrydate)+ + DATENAME(mmsite_entrydate)
  
  Day and Month Posted FORM site_directory
  
  這個例子執行時將返回如下的結果
  
  Site Name Day and Month Posted
  
  ………………………………………………………………………
  
  Yahoo Friday February
  
  Microsoft Tuesday June
  
  Magicw Monday June
  
  ( row(s) affected)
  
  返回日期和時間范圍
  
  當你分析表中的數據時你也許希望取出某個特定時間的數據你也許對特定的某一天中――比如說日――訪問者在你站點上的活動感興趣要取出這種類型的數據你也許會試圖使用這樣的SELECT語句
  
  SELECT * FROM weblog WHERE entrydate=//
  
  不要這樣做這個SELECT語句不會返回正確的記錄――它將只返回日期和時間是// :::AM的記錄換句話說只有剛好在午夜零點輸入的記錄才被返回
  
  注意
  
  在本節的討論中假設字段entrydate是DATETIME型而不是SMALLDATETIME型本節的討論對SMALLDATETIME型字段也是適用的不過SMALLDATETIME型字段只能精確到秒
  
  問題是SQL Sever將用完整的日期和時間代替部分日期和時間例如當你輸入一個日期但不輸入時間時SQL Sever將加上缺省的時間AM當你輸入一個時間但不輸入日期時SQL Sever將加上缺省的日期Jan
  
  要返回正確的記錄你需要適用日期和時間范圍有不止一種途徑可以做到這一點例如下面的這個SELECT 語句將能返回正確的記錄
  
  SELECT * FROM weblog
  
  WHERE entrydate>=// AND entrydate<//
  
  這個語句可以完成任務因為它選取的是表中的日期和時間大於等於// :::AM並小於// :::AM的記錄換句話說它將正確地返回年聖誕節這一天輸入的每一條記錄
  
  另一種方法是你可以使用LIKE來返回正確的記錄通過在日期表達式中包含通配符你可以匹配一個特定日期的所有時間這裡有一個例子
  
  SELECT * FROM weblog WHERE entrydate LIKE Dec %
  
  這個語句可以匹配正確的記錄因為通配符代表了任何時間 使用這兩種匹配日期和時間范圍的函數你可以選擇某個月某一天某一年某個小時某一分鐘某一秒甚至某一毫秒內輸入的記錄但是如果你使用LIKE 來匹配秒或毫秒你首先需要使用函數CONVERT()把日期和時間轉換為更精確的格式(參見前面轉換日期和時間一節)
  
  比較日期和時間
  
  最後還有兩個日期和時間函數對根據日期和時間取出記錄是有用的使用函數DATEADD()和DATEDIFF()你可以比較日期的早晚例如下面的SELECT語句將顯示表中的每一條記錄已經輸入了多少個小時
  
  SELECT entrydate Time Entered
  
  DATEDIFF(hhentrydateGETDATE()) Hours Ago FROM weblog
  
  如
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22134.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.