--- tags: MySQL, SQL --- # MySQL-Func [TOC] * * * ## 字元函式: ### 連接字串 - CONCAT(A, B, C) COLUMNS or 任意字元 - CONCAT_WS('str', A, B, C) str:分割字元 - SPACE(n) n 空白字元數量 - IFNULL(COLUMN, 'str') COLUMN 如果是NULL 輸出 str ### 插入字串 - INSERT('str', n, m, 's') 將'str' 的 n 字元 ~ n+m 字元 由 's' 字串取代 ### 替換字串 - REPLACE('str', 'r', 's') 在'str'字串中的字串 'r' 用 's' 取代 --> 'sts' 沒有 'r' 則不處理 ### 反轉字串 也可以放字串 COL - REVRESE('COLUMN') - > 'NMULOC' ### 重複字串 - REPEAT('STR', 'NUM') NUM 可用數字COL ### 大小寫轉換: - 大寫UPPER() UCASE() - 小寫LOWER() LCASE() ### 輸出'字串' 用單引號框住'STR' - QUOTE(COLUMN) ### 修正(刪除)空白字元 | / | func | | --- | ------- | | 右 | RTRUM() | | 左 | LTRIM() | | 雙邊 | TRIM() | ### 修正(刪除)其他字元 TRIM('str', COLUMN) ,要修正的字元'str' strXXXXXXstr -> XXXXXX ### 補位(str) n:字元數 - RPAD(COLUMN, n, 'str') -> COLUMN.... - LPAD(COLUMN, n, 'str') -> ....COLUMN ### 擷取SUBSTRING() | func | / | | ------------------------------ | --------------------------------------- | | RIGHT(COLUMN, n, '.') | n 字元數 "COL"UMN | | LEFT(COLUMN, n, '.') | n 字元數 COL"UMN" | | MID(COLUMN, n, m) | CO"LUM"N n=2 m=3 (n:起始字元index m:擷取字元數) | | SUBSTRING(COLUMN, n, m) | 同MID() | | SUBSTRING(COLUMN FROM n FOR m) | n ~ m個字元 | | SUBSTRING(COLUMN, -m) | 倒數m 個字元 | | LOCATE('STR', COLUMN) | COLUMN 中的STR INDEX 第幾字元 | | POSITION('STR' IN COLUMN) | COLUMN 中的STR INDEX 第幾字元 | SUBSTRING_INDEX(COLUNM, 'STR', n) 第n STR 之前的字元 STR: | COL: A|B|C n: 1 2 ### 字元數 | func | / | | -------------------------- | ------ | | LENGTH(COLUMN) COLUMN | 字串字元數 | | CHAR_LENGTH(COLUMN) COLUMN | 字串字元數 | | CHARACTER_LENGTH(COLUMN) | 字串字元數 | | BIT_LENGTH(COLUMN) | 字串佔位元數 | ### 時間資料格式: | func | / | | --------- | -------------------- | | DATE | yyyy-mm-dd | | TIME | hhh:mm:ss | | DATETIME | yyyy-mm-dd hhh:mm:ss | | TIMESTAMP | yyyy-mm-dd hhh:mm:ss | | YEAR | yyyy | * * * ### 時間格式擷取函式: | func | / | | -------- | ------------ | | DATE() | 擷取yyyy-mm-dd | | TIME() | 擷取hhh:mm:ss | | YEAR() | 擷取yyyy | | MONTH() | 擷取mm | | DAY() | 擷取dd | | HOUR() | 擷取hhh | | MINUTE() | 擷取mm | | SECOND() | 擷取ss | * * * ### 使用EXTRACT()函式擷取: EXTRACT(interval FROM DATETIME_COLUMN) interval Format for given values | func | format | | ------------------ | :-----------: | | DAY | dd | | DAY_HOUR | ‘dd hh' | | DAY_MICROSECOND | ‘dd.nn’ | | DAY_MINUTE | ‘dd hh:mm’ | | DAY_SECOND | ‘dd hh:mm:ss’ | | HOUR | hh | | HOUR_MICROSECOND | ‘hh.nn’ | | HOUR_MINUTE | ‘hh:mm’ | | HOUR_SECOND | ‘hh:mm:ss’ | | MICROSECOND | nn | | MINUTE | mm | | MINUTE_MICROSECOND | ‘mm.nn’ | | MINUTE_SECOND | ‘mm:ss’ | | MONTH | mm | | QUARTER | qq | | SECOND | ss | | SECOND_MICROSECOND | 'ss.nn’ | | WEEK | ww | | YEAR | yy | | YEAR_MONTH | ‘yy-mm' | * * * ### 日期時間格式化函式: DATE_FORMAT(COLUMN, '%code') 也可以處理TIME_FORMAT() TIME_FORMAT(COLUMN, '%code') 其實可以用不到! | % | func | unit | | ----- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------- | | Code | Description | Results | | %a | Abbreviated weekday name | (Sun...Sat) | | %b | Abbreviated month name | (Jan...Dec) | | %c | Month (numeric) | (1...12) | | %d | Day of the month (numeric) | (00...31) | | %D | Day of the month with English suffix (1st, 2nd, 3rd, etc.)%e Day of the month | (numeric) (0...31) | | %f | Microseconds (numeric) | (000000...999999) | | %h,%I | Hour 12hr | (01...12) | | %H | Hour 24hr | (00...23) | | %i | Minutes (numeric) | (00...59) | | %j | Day of the year | (001...366) | | %k | Hour | (0...23) | | %l | Hour | (1...12) | | %m | Month (numeric) | (01...12) | | %M | Month name | (January...December) | | %p | AM or PM | (AM or PM) | | %r | Time, 12-hour | (hh:mm:ss [AP]M) | | %s,%S | Seconds | (00...59) | | %T | Time, 24-hour | (hh:mm:ss) | | %u | Week, where Monday is the first day of the week | (0...52) | | %U | Week, where Sunday is the first day of the week | (0...52) | | %v | Week, where Monday is the first day of the week; used with \`%x’ \| (1...53) | | | %V | Week, where Sunday is the first day of the week; used with\`%X’ \| (1...53) | | | %w | Day of the week | (0=Sunday...6=Saturday) | | %W | Weekday name | (Sunday...Saturday) | | %x | Year for the week, where Monday is the first day of the week (numeric, four digits);used with \`%v’ \| (yyyy) | | | %X | Year for the week, where Sunday is the first day of the week (numeric, four digits);used with\`%V’ \| (yyyy) | | | %y | Year (numeric, two digits) | (yy) | | %Y | Year (numeric, four digits) | (yyyy) | | %% | A literal \`%’ | (%) | * * * GET_FORMAT(時間格式, 'USA'時間標準) 輸出時間格式(%code) 時間格式:DATE,TIME,DATETIME,TIMESTAMP,YEAR | 時間標準 | | | -------- | -------------------------------- | | EUR | for Europe | | INTERNAL | for the format in which time | | ISO | for ISO 9075 standard | | JIS | for Japanese Industrial Standard | | USA | for United States | TIME_TO_SEC(TIME) 時間轉成幾秒(不管日期) SEC_TO_TIME(SEC(num)) 幾秒轉成時間(只保留時間,最大單位hour) DATEDIFF(DATE1, DATE2) 日期差距DATE2 - DATE1 TIMEDIFF(TIME1, TIME2) 時間差距TIME2 - TIME1 * * * ### 日期的加減: DATE_ADD(DATE, INTERVAL '1 DAY') 可以用負數代表DATE_SUB DATE_SUB(DATE, INTERVAL '1 DAY') ADDDATE(DATE, NUM) 不需要引數 直接輸入數字 單位DAY SUBDATE(DATE, NUM) ### 時間的加減: ADDTIME(TIME, NUM) 不需要引數 直接輸入數字 單位SEC SUBTIME(TIME, NUM) ### 數值處理函式: | func | / | | --------------- | --------------------------- | | SIGN() | 正負值,輸出1,0,-1 | | ABS() | 絕對值 | | SUM() | 總和 | | AVG() | 平均 | | COUNT() | 計數(不含Null) | | MIN() | 最小 | | MAX() | 最大 | | STDDEV() | 標準差 | | VARIANCE() | 變異數 | | RAND() 0~1 | 隨機小數 | | ROUND(FLOAT, n) | 丟棄小數點(4捨5入) , n 保留位數, 不設預設0 | | FLOOR(NUM) | 丟棄小數點(無條件) | * * * ### 條件函式: ```SQL CASE WHEN 條件1 THEN Value1 WHEN 條件2 THEN Value2 ELSE Value3 END IF(條件, T, F) IFNULL(T, F) ``` * * * ### 其他函式: | func | / | | ------------- | -------- | | DATEBASE() | 目前資料庫 | | VERSION() | MYSQL 版本 | | USER() | 目前使用者 | | PASSWORD(str) | 加密 str |