PLSQL經常使用函數(ORACLE)(2)

---------------------------------------------------------------------------------------------------------- 一、Dateadd   在向指定日期加上一段時間的基礎上,返回新的   datetime   值。      語法 :DATEADD(datepart,number,date)        參數   datepart      是規定應向日期的哪一部分返回新值的參數。下表列出了識別的日期部分和縮寫。      日期部分   縮寫        Year   yy,   yyyy        quarter   qq,   q        Month   mm,   m        dayofyear   dy,   y        Day   dd,   d        Week   wk,   ww        Hour   hh        minute   mi,  n         second   ss,   s        millisecond   ms                  number        是用來增長datepart的值。若是指定一個不是整數的值,則將廢棄此值的小數部分。   例如,若是爲datepart指定day,爲number指定1.75,則date將增長1。           date       是返回datetime或smalldatetime值或日期格式字符串的表達式。有關指定日期的更多信息,請參見datetime和smalldatetime。      若是您只指定nian份的最後兩位數字,則小於或等於"兩位數nian份截止期"配置選項的值的最後兩位數字的數字所在世紀與截止nian所   在世紀相同。大於該選項的值的最後兩位數字的數字所在世紀爲截止nian所在世紀的前一個世紀。   例如,若是two  digit year cutoff 爲 2049(默認),則 49 被解釋爲 2049,2050 被解釋爲 1950。   爲避免模糊,請使用四位數的nian份。           返回類型      返回   datetime,但若是   date   參數是   smalldatetime,返回   smalldatetime。     二、DATEDIFF     返回跨兩個指定日期的日期和時間邊界數。     1、 語法     DATEDIFF ( datepart , startdate , enddate )     2、參數     datepart     是規定了應在日期的哪一部分計算差額的參數。下表列出了 Microsoft? SQL Server? 識別的日期部分和縮寫。     日期部分 縮寫     year yy, yyyy     quarter qq, q     Month mm, m     dayofyear dy, y     Day dd, d     Week wk, ww     Hour hh     minute mi, n     second ss, s     millisecond ms         startdate     是計算的開始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表達式。     由於 smalldatetime 只精確到分鐘,因此當用 smalldatetime 值時,秒和毫秒老是 0。     若是您只指定nian份的最後兩位數字,則小於或等於"兩位數nian份截止期"配置選項的值的最後兩位數字的數字所在世紀與截止nian所在世紀相同。大於該選項的值的最後兩位數字的數字所在世紀爲截止nian所在世紀的前一個世紀。例如,若是 two digit year cutoff 爲 2049(默認),則 49 被解釋爲 2049,2050 被解釋爲 1950。爲避免模糊,請使用四位數的nian份。          enddate     是計算的終止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表達式。          3、返回類型     integer     4、用法     此函數計算兩個指定日期之間日期部分的數目。結果爲日期部分中等於(date2 - date1)的有符號的整數值。     當結果不是日期部分的偶數倍時,DATEDIFF 將被截斷而不是被舍入。     當使用 day 做爲日期部分時,DATEDIFF 返回兩個指定的時間之間(包括第二個日期但不包括第一個日期)的午夜數。     當使用 month 做爲日期部分時,DATEDIFF 返回兩個日期之間(包括第二個日期但不包括第一個日期)出現的月的第一天的數目。     當使用 week 做爲日期部分時,DATEDIFF 返回兩個日期(包括第二個日期但不包括第一個日期)之間星期日的數目。     對於更小的時間單位存在溢出值: milliseconds    24 天  seconds    68 nian  minutes    4083 nian  others    沒有溢出限制  若是超出這些限制,此函數將返回溢出錯誤。     5、標準和兼容性 SQL/92    Transact-SQL 擴展。 SQL/99    Transact-SQL 擴展。 Sybase    與 Adaptive Server Enterprise 兼容。    6、示例     下面的語句返回 1:      select datediff( hour, ''4:00am'', ''5:50am'' )     下面的語句返回 102:     select datediff( month, ''1987/05/02'', ''1995/11/15'' )     下面的語句返回 0:     select datediff( day, ''00:00'', ''23:59'' )     下面的語句返回 4:      select datediff( day, ''1999/07/19 00:00'',''1999/07/23 23:59'' )     下面的語句返回 0:     select datediff( month, ''1999/07/19'', ''1999/07/23'' )     下面的語句返回 1:     select datediff( month, ''1999/07/19'', ''1999/08/23'' )   三、decode函數   decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,缺省值)      該函數的含義以下:      IF 條件=值1 THEN   RETURN(翻譯值1)   ELSIF 條件=值2 THEN   RETURN(翻譯值2)   ......   ELSIF 條件=值n THEN   RETURN(翻譯值n)      ELSE   RETURN(缺省值)   END IF      ·使用方法:      一、比較大小      select decode(sign(變量1-變量2),-1,變量1,變量2) from dual; --取較小值   sign()函數根據某個值是0、正數仍是負數,分別返回0、一、-1      例如:   變量1=10,變量2=20   則sign(變量1-變量2)返回-1,decode解碼結果爲「變量1」,達到了取較小值的目的。      二、表、視圖結構轉化      現有一個商品銷售表sale,表結構爲:      month    char(6)      --月份   sell    number(10,2)   --月銷售金額      現有數據爲:      200001  1000   200002  1100   200003  1200   200004  1300   200005  1400   200006  1500   200007  1600   200101  1100   200202  1200   200301  1300      想要轉化爲如下結構的數據:      year   char(4)      --nian份   month1  number(10,2)   --1月銷售金額   month2  number(10,2)   --2月銷售金額   month3  number(10,2)   --3月銷售金額   month4  number(10,2)   --4月銷售金額   month5  number(10,2)   --5月銷售金額   month6  number(10,2)   --6月銷售金額   month7  number(10,2)   --7月銷售金額   month8  number(10,2)   --8月銷售金額   month9  number(10,2)   --9月銷售金額   month10  number(10,2)   --10月銷售金額   month11  number(10,2)   --11月銷售金額   month12  number(10,2)   --12月銷售金額      結構轉化的SQL語句爲:      create or replace view   v_sale(year,month1,month2,month3,month4,month5,month6,      month7,month8,month9,month10,month11,month12)   as   select   substrb(month,1,4),   sum(decode(substrb(month,5,2),'01',sell,0)),   sum(decode(substrb(month,5,2),'02',sell,0)),   sum(decode(substrb(month,5,2),'03',sell,0)),   sum(decode(substrb(month,5,2),'04',sell,0)),   sum(decode(substrb(month,5,2),'05',sell,0)),   sum(decode(substrb(month,5,2),'06',sell,0)),   sum(decode(substrb(month,5,2),'07',sell,0)),   sum(decode(substrb(month,5,2),'08',sell,0)),   sum(decode(substrb(month,5,2),'09',sell,0)),   sum(decode(substrb(month,5,2),'10',sell,0)),   sum(decode(substrb(month,5,2),'11',sell,0)),   sum(decode(substrb(month,5,2),'12',sell,0))   from sale   group by substrb(month,1,4); 四、CAST和CONVERT  將某種數據類型的表達式顯式轉換爲另外一種數據類型。CAST 和 CONVERT 提供類似的功能。  語法  使用 CAST:  CAST ( expression AS data_type )  使用 CONVERT:  CONVERT (data_type[(length)], expression [, style])  參數  expression  是任何有效的 Microsoft? SQL Server? 表達式。有關更多信息,請參見表達式。  data_type  目標系統所提供的數據類型,包括 bigint 和 sql_variant。不能使用用戶定義的數據類型。有關可用的數據類型的更多信息,請參見數據類型。  length  nchar、nvarchar、char、varchar、binary 或 varbinary 數據類型的可選參數。    style  日期格式樣式,藉以將 datetime 或 smalldatetime 數據轉換爲字符數據(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數據類型);或者字符串格式樣式,藉以將 float、real、money 或 smallmoney 數據轉換爲字符數據(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數據類型)。    SQL Server 支持使用科威特算法的阿拉伯樣式中的數據格式。    在表中,左側的兩列表示將 datetime 或 smalldatetime 轉換爲字符數據的 style 值。給 style 值加 100,可得到包括世紀數位的四位nian份 (yyyy)。    不帶世紀數位 (yy) 帶世紀數位 (yyyy)   標準   輸入/輸出**   - 0 或 100 (*) 默認值 mon dd yyyy hh:miAM(或 PM)   1 101 美國 mm/dd/yyyy   2 102 ANSI yy.mm.dd   3 103 英國/法國 dd/mm/yy   4 104 德國 dd.mm.yy   5 105 意大利 dd-mm-yy   6 106 - dd mon yy   7 107 - mon dd, yy   8 108 - hh:mm:ss   - 9 或 109 (*) 默認值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)   10 110 美國 mm-dd-yy   11 111 日本 yy/mm/dd   12 112 ISO yymmdd   - 13 或 113 (*) 歐洲默認值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)   14 114 - hh:mi:ss:mmm(24h)   - 20 或 120 (*) ODBC 規範 yyyy-mm-dd hh:mm:ss[.fff]   - 21 或 121 (*) ODBC 規範(帶毫秒) yyyy-mm-dd hh:mm:ss[.fff]   - 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格)   - 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM   - 131* 科威特 dd/mm/yy hh:mi:ss:mmmAM      *    默認值(style 0 或 100、9 或 10九、13 或 11三、20 或 120、21 或 121)始終返回世紀數位 (yyyy)。  ** 當轉換爲 datetime 時輸入;當轉換爲字符數據時輸出。  *** 專門用於 XML。對於從 datetime 或 smalldatetime 到 character 數據的轉換,輸出格式如表中所示。對於從 float、money 或 smallmoney 到 character 數據的轉換,輸出等同於 style 2。對於從 real 到 character 數據的轉換,輸出等同於 style 1。        重要 默認狀況下,SQL Server 根據截止nian份 2049 解釋兩位數字的nian份。即,兩位數字的nian份 49 被解釋爲 2049,而兩位數字的nian份 50 被解釋爲 1950。許多客戶端應用程序(例如那些基於 OLE 自動化對象的客戶端應用程序)都使用 2030 做爲截止nian份。SQL Server 提供一個配置選項("兩位數字的截止nian份"),藉以更改 SQL Server 所使用的截止nian份並對日期進行一致性處理。然而最安全的辦法是指定四位數字nian份。      當從 smalldatetime 轉換爲字符數據時,包含秒或毫秒的樣式將在這些位置上顯示零。當從 datetime 或 smalldatetime 值進行轉換時,能夠經過使用適當的 char 或 varchar 數據類型長度來截斷不須要的日期部分。    下表顯示了從 float 或 real 轉換爲字符數據時的 style 值。    值 輸出   0(默認值) 最大爲 6 位數。根據須要使用科學記數法。   1 始終爲 8 位值。始終使用科學記數法。   2 始終爲 16 位值。始終使用科學記數法。      在下表中,左列表示從 money 或 smallmoney 轉換爲字符數據時的 style 值。    值 輸出   0(默認值) 小數點左側每三位數字之間不以逗號分隔,小數點右側取兩位數,例如 4235.98。   1 小數點左側每三位數字之間以逗號分隔,小數點右側取兩位數,例如 3,510.92。   2 小數點左側每三位數字之間不以逗號分隔,小數點右側取四位數,例如 4235.9819。       返回類型  返回與 data type 0 相同的值。       五、CHARINDEX函數     返回字符或者字符串在另外一個字符串中的起始位置。CHARINDEX函數調用方法以下:         CHARINDEX ( expression1 , expression2 [ , start_location ] )        Expression1是要到expression2中尋找的字符中,start_location是CHARINDEX函數開始在expression2中找expression1的位置。        CHARINDEX函數返回一個整數,返回的整數是要找的字符串在被找的字符串中的位置。假如CHARINDEX沒有找到要找的字符串,那麼函數整數「0」。讓咱們看看下面的函數命令執行的結果:       CHARINDEX('SQL', 'Microsoft SQL Server')       這個函數命令將返回在「Microsoft SQL Server」中「SQL」的起始位置,在這個例子中,CHARINDEX函數將返回「S」在「Microsoft SQL Server」中的位置11。      接下來,咱們看這個CHARINDEX命令:       CHARINDEX('7.0', 'Microsoft SQL Server 2000')       在這個例子中,CHARINDEX返回零,由於字符串「7.0」 不能在「Microsoft SQL Server」中被找到。接下來經過兩個例子來看看如何使用CHARINDEX函數來解決實際的T-SQL問題。 六、DATEPART  返回表明指定日期的指定日期部分的整數。    語法  DATEPART ( datepart ,date )     參數  datepart    是指定應返回的日期部分的參數。下表列出了 Microsoft? SQL Server? 識別的日期部分和縮寫。    日期部分 縮寫   year yy, yyyy   quarter qq, q   month mm, m   dayofyear dy, y   day dd, d   week wk, ww   weekday dw   Hour hh   minute mi, n   second ss, s   millisecond ms        week (wk, ww) 日期部分反映對 SET DATEFIRST 做的更改。任何一      的 1 月 1 日定義了 week 日期部分的開始數字,例如:DATEPART(wk, 'Jan 1, xxxx') = 1,此處 xxxx 表明任一nian。    weekday (dw) 日期部分返回對應於星期中的某天的數,例如:Sunday = 一、Saturday = 7。weekday 日期部分產生的數取決於 SET DATEFIRST 設定的值,此命令設定星期中的第一天。    date    是返回 datetime 或 smalldatetime 值或日期格式字符串的表達式。對 1753 nian 1 月 1 日以後的日期用datetime 數據類型。更早的日期存儲爲字符數據。當輸入 datetime 值時,始終將其放入引號中。由於 smalldatetime 只精確到分鐘,因此當用 smalldatetime 值時,秒和毫秒老是 0。    若是隻指定nian份的最後兩位數字,則小於或等於"兩位數nian份截止期"配置選項的值的最後兩位數字的數字所在世紀與截止nian所在世紀相同。大於該選項的值的最後兩位數字的數字所在世紀爲截止nian所在世紀的前一個世紀。例如,若是 two digit year cutoff 爲 2049 (默認),則 49 被解釋爲 2049,2050 被解釋爲 1950。爲避免模糊,請使用四位數的nian份。    有關時間值指定的更多信息,請參見時間格式。有關日期指定的更多信息,請參見 datetime 和 smalldatetime。    返回類型  int    註釋  DAY、MONTH、和 YEAR 函數分別是 DATEPART(dd, date)、DATEPART(mm, date)、和 DATEPART(yy, date) 的同義詞。    示例  GETDATE 函數返回當前日期;然而,比較時並不老是須要完整的日期信息(一般只是對日期的一部分進行比較)。此示例顯示 GETDATE 及 DATEPART 的輸出。    SELECT GETDATE() AS 'Current Date'  GO    下面是結果集:    Current Date  ---------------------------  Feb 18 1998 11:46PM  SELECT DATEPART(month, GETDATE()) AS 'Month Number'  GO    下面是結果集:    Month Number  ------------  2    此示例假設日期是 5 月 29 日。    SELECT DATEPART(month, GETDATE())  GO    下面是結果集:    -----------  5  (1 row(s) affected)    在此示例中,以數字表示日期。注意:SQL Server 將 0 解釋爲 01/01/1900。    SELECT DATEPART(m, 0), DATEPART(d, 0), DATEPART(yy, 0)    下面是結果集:    ----- ------ ------  1     1      1900 七、SUBSTRING  功能:返回字符、二進制、文本或圖像表達式的一部分  語法:SUBSTRING ( expression, start, length )   SUBSTR(str,pos): 由<str>中,選出全部從第<pos>位置開始的字元。請注意,這個語法不適用於SQL Server上。          SUBSTR(str,pos,len): 由<str>中的第<pos>位置開始,選出接下去的<len>個字元。         SQL 中的 substring 函數是用來抓出一個欄位資料中的其中一部分。這個函數的名稱在不一樣的資料庫中不徹底同樣:   MySQL: SUBSTR(), SUBSTRING()   Oracle: SUBSTR()   SQL Server: SUBSTRING()   參數:  expression 字符串、二進制字符串、文本、圖像、列或包含列的表達式。請勿使用包含聚合函數的表達式。  start 整數或能夠隱式轉換爲 int 的表達式,指定子字符串的開始位置。  length 整數或能夠隱式轉換爲 int 的表達式,指定子字符串的長度。   返回值:   若是 expression 是一種支持的字符數據類型,則返回字符數據。若是 expression 是一種支持的二進制數據類型,則返回二進制數據。若是 start = 1,則子字符串從表達式的第一個字符開始。   返回字符串的類型與給定表達式的類型相同(下表所示內容除外)。  給定表達式  返回類型    image  varbinary   ntext   nvarchar    八、stuff  stuff的功能:刪除指定長度的字符串並在指定的起始點插入另外一組字符  STUFF ( character_expression , start , length , character_expression )   character_expression :操做的字符,  start:刪除和插入的起始點,  length:刪除的長度,  character_expression :要插入的字符  注:sql的stuff()函數和編程中數組的下標起始位置不同,數組是以0開始的,而 stuff()函數是以 1 開始的。  若是 stuff() 函數以 0 開始的話,它是從expression1_Str 字符串的最後一個字符開始截取。例子以下所示:     例1:stuff('00000000',0,3,'123') --> 對應的結果是: (沒有值輸出)     例2:stuff('00000000',1,3,'123') --> 對應的結果是:12300000 九、ceiling函數   floor函數      ceiling函數返回大於或等於所給數字表達式的最小整數。  floor函數返回小於或等於所給數字表達式的最大整數。  好比  celling(12.1) 結果爲 13  floor(12.1)結果爲 12   在介紹這個以前你必須明白什麼是oracle中的空值null
相關文章
相關標籤/搜索