回覆列表
  • 1 # 大國師魂系列

    db2 concat函式使用方法應參考以下:函式名:

    函式解釋 :函式舉例:

    AVG()

    返回一組數值的平均值. SELECTAVG(SALARY)FROMBSEMPMS;

    CORR(),CORRELATION()

    返回一對數值的關係係數.

    SELECT CORRELATION(SALARY,BONUS)FROM BSEMPMS;

    COUNT()

    返回一組行或值的個數.SELECTCOUNT(*)FROMBSEMPMS;

    COVAR(),COVARIANCE()

    返回一對數值的協方差.

      SELECTCOVAR(SALARY,BONUS)FROMBSEMPMS;

    MAX()

    返回一組數值中的最大值.

      SELECTMAX(SALARY)FROMBSEMPMS;

    MIN()

    返回一組數值中的最小值.

      SELECTMIN(SALARY)FROMBSEMPMS;

    STDDEV()

    返回一組數值的標準偏差.

      SELECTSTDDEV(SALARY)FROMBSEMPMS;

    SUM()

    返回一組資料的和.

      SELECTSUM(SALARY)FROMBSEMPMS;

    VAR(),VARIANCE()

    返回一組數值的方差.

      SELECTVARIANCE(SALARY)FROMBSEMPMS;

    ABS(),ABSVAL()

    返回引數的絕對值.

      SELECTABS(-3.4)FROMBSEMPMS;

    ACOS()

    返回引數的反餘弦值.

      SELECTACOS(0.9)FROMBSEMPMS;

    ASCII()

    返回整數引數最左邊的字元的ASCII碼.  SELECTASCII("R")FROMBSEMPMS;

    ASIN()

    返回用弧度表示的角度的引數的反正弦函式.  SELECTASIN(0.9)FROMBSEMPMS;

    ATAN()

    返回引數的反正切值,該引數用弧度表示的角度的引數.  SELECTATAN(0.9)FROMBSEMPMS;

    ATAN2()

    返回用弧度表示的角度的X和Y座標的反正切值.  SELECTATAN2(0.5,0.9)FROMBSEMPMS;

    BIGINT()

    返回整型常量中的數字或字串的64位整數表示

    SELECTBIGINT(EMP_NO)FROMBSEMPMS;

    CEILING() OR CEIL()

    返回比引數大或等於引數的最小的整數值

    CHAR()

    返回日期時間型,字串,整數,十進位制或雙精度浮點數的字串表示. SELECTCHAR(SALARY,",")FROMBSEMPMS;

    CHR()

    返回具有由引數指定的ASCII碼的字元

    SELECTCHAR(167)FROMBSEMPMS;

    CONCAT()

    返回兩個字串的連線.

    SELECTCONCAT(EMP_NO,EMP_NAM)FROMBSEMPMS;

    YEAR()

    返回數值的年部分.SELECTYEAR("2003/01/02")FROMBSEMPMS;

    VARCHAR()

    返回字串,日期型,圖形串的可變長度的字串表示

    SELECTVARCHAR(EMP_NAM,50)FROMBSEMPMS;

    UCASE() OR UPPER()

    返回字串的大寫

    TRUNCATE() OR TRUNC()

    從表示式小數點右邊的位置開始截斷並返回該數值.

    SELECTTRUNCATE(345.6789,2)FROMBSEMPMS;

    TIME()

    返回一個數值中的時間

    SELECTTIME("2001-03-19.12.30.123456")FROMBSEMPMS;

    SUBSTR(EXP1,EXP2)

    返回EXP1串自EXP2處開始的子串.

    SQRT()

    返回該引數的平方根.SELECTSQRT(36)FROMBSEMPMS;

    SPACE()

    返回由引數指定的長度,包含空格在內的字串.SELECTSPACE(10)FROMBSEMPMS;

    SECOND()

    返回一個數值的秒部分.SELECTSECOND("18:34:32")FROMBSEMPMS;

    RTRIM()

      SELECTRTRIM("COMMENT")FROMBSEMPMS;

    ROUND(EXP1,EXP2)

    返回EXP1小數點右邊的第EXP2位置處開始的四捨五入值.

      SELECTROUND(2345.6789,2)FROMBSEMPMS

    REPLACE(EXP1,EXP2,EXP3)

    用EXP3替代EXP1中所有的EXP2

    SELECTCHAR(REPLACE("ROMANDD","NDD","CCB"),10)

    FROMBSEMPMS;

    REPEAT(EXP1,EXP2)

    返回EXP1重複EXP2次後的字串.

    SELECTCHAR(REPEAT("REPEAT",3),21)FROMBSEMPMS;

    REAL()

    返回一個數值的單精度浮點數表示.

      SELECTREAL(10)FROMBSEMPMS;

    RAND()

    返回0和1之間的隨機浮點數.SELECTRAND()FROMBSEMPMS;

    POWER(EXP1,EXP2)

    返回EXP1的EXP2次冪.SELECTPOWER(2,5)FROMBSEMPMS;

    POSSTR(EXP1,EXP2)

    返回EXP2在EXP1中的位置.SELECT("ABCDEFGH","D")FROMBSEMPMS;

    NULLIF(EXP1,EXP2)

    如果EXP1=EXP2,則為NULL,否則為EXP1

    NODENUMBER()

    返回行的分割槽號.SELECTNODENUMBER(EMP_NO)FROMBSEMPMS;

    MONTH()

    返回一個數值的月部分.SELECTMONTH("2003/10/20")FROMBSEMPMS;

    MOD(EXP1,EXP2)

    返回EXP1除以EXP2的餘數.SELECTMOD(20,8)FROMBSEMPMS

    MINUTE()

    返回一個數值的分鐘部分.

      SELECTMINUTE("18:34:23")FROMBSEMPMS;

    LTRIM()

    HOUR()

    返回一個數值的小時部分.

      SELECTHOUR("18:34:23")FROMBSEMPMS;

    DOUBLE()

    如果引數是一個數字表達式,返回與其相對應的浮點數,如果引數是字串表示式,則返回該數的字串表示式.

      SELECTDOUBLE("5678")FROMBSEMPMS;

    EXP()

    返回引數的指數函式.SELECTEXP(2)FROMBSEMPMS;

    FLOAT()

    返回一個數的浮點表示.SELECTFLOAT(789)FROMBSEMPMS;

    FLOOR()

    返回小於或等於引數的最大整數.SLECTFLOOR(88.93)FROMBSEMPMS;

    HEX()

    返回一個表示為字串的值的16進製表示.

    SELECTHEX(16)FROMBSEMPMS;

    DAYNAME

    返回一個大小寫混合的字串,對於引數的日部分,用星期表示這一天的名稱(例如,Friday)。

    DAYOFWEEK

    返回引數中的星期幾,用範圍在1-7 的整數值表示,其中1 代表星期日。

    DAYOFWEEK_ISO

    返回引數中的星期幾,用範圍在1-7 的整數值表示,其中1 代表星期一。

    DAYOFYEAR

    返回引數中一年中的第幾天,用範圍在1-366的整數值表示。

    DAYS

    返回日期的整數表示。

    JULIAN_DAY

    返回從公元前4712 年1 月1 日(儒略日曆的開始日期)到引數中指定日期值之間的天數,用整數值表示。

    MIDNIGHT_SECONDS

    返回午夜和引數中指定的時間值之間的秒數,用範圍在0 到86400 之間的整數值表示。

    MONTHNAME

    對於引數的月部分的月份,返回一個大小寫混合的字串(例如,January)。

    TIMESTAMP_ISO

    根據日期、時間或時間戳記引數而返回一個時間戳記值。

    TIMESTAMP_FORMAT

    從已使用字元模板解釋的字串返回時間戳記。

    TIMESTAMPDIFF

    根據兩個時間戳記之間的時差,返回由第一個引數定義的型別表示的估計時差。

    TO_CHAR

    返回已用字元模板進行格式化的時間戳記的字元表示。TO_CHAR 是VARCHAR_FORMAT 的同義詞。

    TO_DATE

    從已使用字元模板解釋過的字串返回時間戳記。TO_DATE 是TIMESTAMP_FORMAT 的同義詞。

    WEEK

    返回引數中一年的第幾周,用範圍在1-54 的整數值表示。以星期日作為一週的開始。

    WEEK_ISO

    返回引數中一年的第幾周,用範圍在1-53 的整數值表示。

    要使當前時間或當前時間戳記調整到GMT/CUT,則把當前的時間或時間戳記減去當前時區暫存器:

    current time - current timezone

    current timestamp - current timezone

    給定了日期、時間或時間戳記,則使用適當的函式可以單獨抽取出(如果適用的話)年、月、日、時、分、秒及微秒各部分:

    YEAR (current timestamp)

    MONTH (current timestamp)

    DAY (current timestamp)

    HOUR (current timestamp)

    MINUTE (current timestamp)

    SECOND (current timestamp)

    MICROSECOND (current timestamp)

    因為沒有更好的術語,所以您還可以使用英語來執行日期和時間計算:

    current date + 1 YEAR

    current date + 3 YEARS + 2 MONTHS +15 DAYS

    current time + 5 HOURS - 3 MINUTES +10 SECONDS

    從時間戳記單獨抽取出日期和時間也非常簡單:

    DATE (current timestamp)

    TIME (current timestamp)

    而以下示例描述瞭如何獲得微秒部分歸零的當前時間戳記:

    CURRENT TIMESTAMP - MICROSECOND(current timestamp) MICROSECONDS

    如果想將日期或時間值與其它文字相銜接,那麼需要先將該值轉換成字串。為此,只要使用CHAR() 函式:

    char(current date)

    char(current time)

    char(current date + 12 hours)

    要將字串轉換成日期或時間值,可以使用:

    TIMESTAMP("2002-10-20-12.00.00.000000")

    TIMESTAMP ("2002-10-20 12:00:00")

    DATE ("2002-10-20")

    DATE ("10/20/2002")

    TIME ("12:00:00")

    TIME ("12.00.00")

    TIMESTAMP()、DATE() 和TIME() 函式接受更多種格式。上面幾種格式只是示例,我將把它作為一個練習,讓讀者自己去發現其它格式。

    有時,您需要知道兩個時間戳記之間的時差。為此,DB2 提供了一個名為TIMESTAMPDIFF() 的內建函式。但該函式返回的是近似值,因為它不考慮閏年,而且假設每個月只有30 天。以下示例描述瞭如何得到兩個日期的近似時差:

    timestampdiff (<n>, char(

    timestamp("2002-11-30-00.00.00")-

    timestamp("2002-11-08-00.00.00")))

    對於<n>,可以使用以下各值來替代,以指出結果的時間單位:

    1 = 秒的小數部分

    2 = 秒

    4 = 分

    8 = 時

    16 = 天

    32 = 周

    64 = 月

    128 = 季度

    256 = 年

    當日期很接近時使用timestampdiff()比日期相差很大時精確。如果需要進行更精確的計算,可以使用以下方法來確定時差(按秒計):

    (DAYS(t1) - DAYS(t2)) * 86400+

    (MIDNIGHT_SECONDS(t1) -MIDNIGHT_SECONDS(t2))

    為方便起見,還可以對上面的方法建立SQL 使用者定義的函式:

    CREATE FUNCTION secondsdiff(t1TIMESTAMP, t2 TIMESTAMP)

    RETURNS INT

    RETURN (

    (DAYS(t1) - DAYS(t2)) * 86400+

    (MIDNIGHT_SECONDS(t1) - MIDNIGHT_SECONDS(t2))

    )

    @

    如果需要確定給定年份是否是閏年,以下是一個很有用的SQL 函式,您可以建立它來確定給定年份的天數:

    CREATE FUNCTION daysinyear(yr INT)

    RETURNS INT

    RETURN (CASE (mod(yr, 400)) WHEN 0THEN 366 ELSE

    CASE(mod(yr, 4)) WHEN 0 THEN

    CASE(mod(yr, 100)) WHEN 0 THEN 365 ELSE 366 END

    ELSE365 END

    END)@

    最後,以下是一張用於日期操作的內建函式表。它旨在幫助您快速確定可能滿足您要求的函式,但未提供完整的參考。有關這些函式的更多資訊,請參考SQL 參考大全。

    SQL 日期和時間函式

    DAYNAME 返回一個大小寫混合的字串,對於引數的日部分,用星期表示這一天的名稱(例如,Friday)。

    DAYOFWEEK 返回引數中的星期幾,用範圍在1-7 的整數值表示,其中1 代表星期日。

    DAYOFWEEK_ISO 返回引數中的星期幾,用範圍在1-7 的整數值表示,其中1 代表星期一。

    DAYOFYEAR 返回引數中一年中的第幾天,用範圍在1-366 的整數值表示。

    DAYS 返回日期的整數表示。

    JULIAN_DAY 返回從公元前4712 年1 月1 日(儒略日曆的開始日期)到引數中指定日期值之間的天數,用整數值表示。

    MIDNIGHT_SECONDS 返回午夜和引數中指定的時間值之間的秒數,用範圍在0 到86400 之間的整數值表示。

    MONTHNAME 對於引數的月部分的月份,返回一個大小寫混合的字串(例如,January)。

    TIMESTAMP_ISO 根據日期、時間或時間戳記引數而返回一個時間戳記值。

    TIMESTAMP_FORMAT 從已使用字元模板解釋的字串返回時間戳記。

    TIMESTAMPDIFF 根據兩個時間戳記之間的時差,返回由第一個引數定義的型別表示的估計時差。

    TO_CHAR 返回已用字元模板進行格式化的時間戳記的字元表示。TO_CHAR 是VARCHAR_FORMAT 的同義詞。

    TO_DATE 從已使用字元模板解釋過的字串返回時間戳記。TO_DATE 是TIMESTAMP_FORMAT 的同義詞。

    WEEK 返回引數中一年的第幾周,用範圍在1-54 的整數值表示。以星期日作為一週的開始。

    WEEK_ISO 返回引數中一年的第幾周,用範圍在1-53 的整數值表示。

    db2日期操作函式

    db2日期操作函式

    當前時間:

    CURRENT DATE

    CURRENT TIME

    CURRENT TIMESTAMP

    獲取時間的年、月、日、時、分、秒及微秒各部分:

    YEAR (current timestamp)

    MONTH (current timestamp)

    DAY (current timestamp)

    HOUR (current timestamp)

    MINUTE (current timestamp)

    SECOND (current timestamp)

    MICROSECOND (current timestamp)

    時間的加減:

    current date + 1 YEAR

    current date + 3 YEARS + 2 MONTHS +15 DAYS

    current time + 5 HOURS - 3 MINUTES +10 SECONDS

    要計算兩個日期之間的天數,您可以對日期作減法:

    days (current date) - days(date("1999-10-22"))

    時間轉換為字串:

    char(current date)

    字串轉換成時間:

    TIMESTAMP()、DATE() 和TIME(), 支援的字串格式需要參考幫助, 沒有oracle的to_date靈活

    Data("2005-01-01")

    日期和時間的一些函式:

    DAYNAME 返回一個大小寫混合的字串,對於引數的日部分,用星期表示這一天的名稱(例如,Friday)。

    DAYOFWEEK 返回引數中的星期幾,用範圍在1-7 的整數值表示,其中1 代表星期日。

    DAYOFWEEK_ISO 返回引數中的星期幾,用範圍在1-7 的整數值表示,其中1 代表星期一。

    DAYOFYEAR 返回引數中一年中的第幾天,用範圍在1-366 的整數值表示。

    DAYS 返回日期的整數表示。

    JULIAN_DAY 返回從公元前4712 年1 月1 日(儒略日曆的開始日期)到引數中指定日期值之間的天數,用整數值表示。

    MIDNIGHT_SECONDS 返回午夜和引數中指定的時間值之間的秒數,用範圍在0 到86400 之間的整數值表示。

    MONTHNAME 對於引數的月部分的月份,返回一個大小寫混合的字串(例如,January)。

    TIMESTAMP_ISO 根據日期、時間或時間戳記引數而返回一個時間戳記值。

    TIMESTAMP_FORMAT 從已使用字元模板解釋的字串返回時間戳記。

    TIMESTAMPDIFF 根據兩個時間戳記之間的時差,返回由第一個引數定義的型別表示的估計時差。

    TO_CHAR 返回已用字元模板進行格式化的時間戳記的字元表示。TO_CHAR 是VARCHAR_FORMAT 的同義詞。

    TO_DATE 從已使用字元模板解釋過的字串返回時間戳記。TO_DATE 是TIMESTAMP_FORMAT 的同義詞。

    WEEK 返回引數中一年的第幾周,用範圍在1-54 的整數值表示。以星期日作為一週的開始。

    WEEK_ISO 返回引數中一年的第幾周,用範圍在1-53 的整數值表示。

    因為沒有更好的術語,所以您還可以使用英語來執行日期和時間計算:

    current date + 1 YEAR

    current date + 3 YEARS + 2 MONTHS +15 DAYS

    current time + 5 HOURS - 3 MINUTES +10 SECONDS

    要計算兩個日期之間的天數,您可以對日期作減法,如下所示:

    days (current date)- days (date("1999-10-22"))

    而以下示例描述瞭如何獲得微秒部分歸零的當前時間戳記:

    CURRENT TIMESTAMP -MICROSECOND (current timestamp) MICROSECONDS

    如果想將日期或時間值與其它文字相銜接,那麼需要先將該值轉換成字串。為此,只要使用CHAR() 函式:

    char(current date)

    char(current time)

    char(current date + 12 hours)

    要將字串轉換成日期或時間值,可以使用:

    TIMESTAMP("2002-10-20-12.00.00.000000")

    TIMESTAMP ("2002-10-20 12:00:00")

    DATE ("2002-10-20")

    DATE ("10/20/2002")

    TIME ("12:00:00")

    TIME ("12.00.00")

    如果你想將當前日期格式轉化成定製的格式(比如‘yyyymmdd’),那又該如何去做呢?按照我的經驗,最好的辦法就是編寫一個自己定製的格式化函式。

    下面是這個UDF 的程式碼:

    create function ts_fmt(TS timestamp,fmt varchar(20))

    returns varchar(50)

    return

    with tmp (dd,mm,yyyy,hh,mi,ss,nnnnnn)as

    (

    select

    substr(digits (day(TS)),9),

    substr(digits (month(TS)),9) ,

    rtrim(char(year(TS))),

    substr(digits (hour(TS)),9),

    substr(digits (minute(TS)),9),

    substr(digits (second(TS)),9),

    rtrim(char(microsecond(TS)))

    from sysibm.sysdummy1

    )

    select

    case fmt

    when"yyyymmdd"

    thenyyyy || mm || dd

    when"mm/dd/yyyy"

    thenmm || "/" || dd || "/" || yyyy

    when"yyyy/dd/mm hh:mi:ss"

    thenyyyy || "/" || mm || "/" || dd || " " ||

    hh|| ":" || mi || ":" || ss

    when "nnnnnn"

    thennnnnnn

    else

    "dateformat " || coalesce(fmt," ") ||

    "not recognized."

    end

    from tmp

    SQL 日期和時間函式

    DAYNAME 返回一個大小寫混合的字串,對於引數的日部分,用星期表示這一天的名稱(例如,Friday)。

    DAYOFWEEK 返回引數中的星期幾,用範圍在1-7 的整數值表示,其中1 代表星期日。

    DAYOFWEEK_ISO 返回引數中的星期幾,用範圍在1-7 的整數值表示,其中1 代表星期一。

    DAYOFYEAR 返回引數中一年中的第幾天,用範圍在1-366 的整數值表示。

    DAYS 返回日期的整數表示。

    JULIAN_DAY 返回從公元前4712 年1 月1 日(儒略日曆的開始日期)到引數中指定日期值之間的天數,用整數值表示。

    MIDNIGHT_SECONDS 返回午夜和引數中指定的時間值之間的秒數,用範圍在0 到86400 之間的整數值表示。

    MONTHNAME 對於引數的月部分的月份,返回一個大小寫混合的字串(例如,January)。

    TIMESTAMP_ISO 根據日期、時間或時間戳記引數而返回一個時間戳記值。

    TIMESTAMP_FORMAT 從已使用字元模板解釋的字串返回時間戳記。

    TIMESTAMPDIFF 根據兩個時間戳記之間的時差,返回由第一個引數定義的型別表示的估計時差。

    TO_CHAR 返回已用字元模板進行格式化的時間戳記的字元表示。TO_CHAR 是VARCHAR_FORMAT 的同義詞。

    TO_DATE 從已使用字元模板解釋過的字串返回時間戳記。TO_DATE 是TIMESTAMP_FORMAT 的同義詞。

    WEEK 返回引數中一年的第幾周,用範圍在1-54 的整數值表示。以星期日作為一週的開始。

    WEEK_ISO 返回引數中一年的第幾周,用範圍在1-53 的整數值表示。

    Example:

    YEAR (current timestamp)

    MONTH (current timestamp)

    DAY (current timestamp)

    HOUR (current timestamp)

    MINUTE (current timestamp)

    SECOND (current timestamp)

    MICROSECOND (current timestamp)

    引用:

    mymm 回覆於:2003-08-0817:01:11

    DAYS函式返回日期的整數表示。

    要計算兩個日期之間的天數,可以:

    days (current date) - days(date("2000-9-1"))

    要使用 SQL 獲得當前的日期、時間及時間戳記,請參考適當的DB2 暫存器:

    SELECT current date FROMsysibm.sysdummy1

    SELECT current time FROMsysibm.sysdummy1

    SELECT current timestamp FROMsysibm.sysdummy1

    sysibm.sysdummy1 表是一個特殊的記憶體中的表,用它可以發現如上面演示的DB2 暫存器的值。您也可以使用關鍵字VALUES 來對暫存器或表示式求值。例如,在DB2 命令列處理器(Command Line Processor,CLP)上,以下SQL 語句揭示了類似資訊:

    VALUES current date

    VALUES current time

    VALUES current timestamp

    在餘下的示例中,我將只提供函式或表示式,而不再重複SELECT ... FROM sysibm.sysdummy1 或使用VALUES 子句。

    要使當前時間或當前時間戳記調整到GMT/CUT,則把當前的時間或時間戳記減去當前時區暫存器:

    current time - current timezone

    current timestamp - current timezone

    給定了日期、時間或時間戳記,則使用適當的函式可以單獨抽取出(如果適用的話)年、月、日、時、分、秒及微秒各部分:

    YEAR (current timestamp)

    MONTH (current timestamp)

    DAY (current timestamp)

    HOUR (current timestamp)

    MINUTE (current timestamp)

    SECOND (current timestamp)

    MICROSECOND (current timestamp)

    從時間戳記單獨抽取出日期和時間也非常簡單:

    DATE (current timestamp)

    TIME (current timestamp)

    因為沒有更好的術語,所以您還可以使用英語來執行日期和時間計算:

    current date + 1 YEAR

    current date + 3 YEARS + 2 MONTHS +15 DAYS

    current time + 5 HOURS - 3 MINUTES +10 SECONDS

    要計算兩個日期之間的天數,您可以對日期作減法,如下所示:

    days (current date) - days(date("1999-10-22"))

    而以下示例描述瞭如何獲得微秒部分歸零的當前時間戳記:

    CURRENT TIMESTAMP - MICROSECOND(current timestamp) MICROSECONDS

    如果想將日期或時間值與其它文字相銜接,那麼需要先將該值轉換成字串。為此,只要使用CHAR() 函式:

    char(current date)

    char(current time)

    char(current date + 12 hours)

    要將字串轉換成日期或時間值,可以使用:

    TIMESTAMP("2002-10-20-12.00.00.000000")

    TIMESTAMP ("2002-10-20 12:00:00")

    DATE ("2002-10-20")

    DATE ("10/20/2002")

    TIME ("12:00:00")

    TIME ("12.00.00")

    TIMESTAMP()、DATE() 和TIME() 函式接受更多種格式。

  • 中秋節和大豐收的關聯?
  • 意媒:米蘭有意請回阿萊格里,但他渴望挑戰英超!米蘭和曼聯,哪家更適合他?