資料庫基礎06——函式
資料庫基礎06——函式
1、字元函式
字元函式主要用於對欄位裡的字串或值進行比較、 連線、 搜尋、 提取片斷等
1.1串接函式
DBMS | 函式說明 |
---|---|
Oracle | || 如:‘john’||‘son’ |
MySQL | CONCAT() 如: CONCAT(‘john’,‘son’) |
SQL Server | + 如:‘john’+‘son’ |
其實MySQL 和Oracle 中都有串接函式,作用和SQL Server中的+號 和Oracle中的 ||號作用一樣。區別在於,Oracle中的串接函式智慧用於兩個字串,而MySQL中的CONCAT可以連線多個字串。
注意:如果要串接數字,就需要將陣列首先轉換為字串。
1.2 TRANSLATE函式
TRANSLATE函式搜尋字串裡的字元並查詢特定的字元, 標記找到的位置, 然後用替代字串裡對應的字元替換它 。 語法如下:
TRANSLATE(CHARACTER SET,VALUE1,VALUE2)
SELECT TRANSLATE(CITY,'IND','ABC' FROM EMPLOYEE_TBL);
--把字串裡面的每一個I都替換為A,每個N都替換為B,每個D都替換為C;
--MySQL和Oracle都支援使用TRANSLATE函式, 但是Microsoft SQL Server還不支援。
1.3 REPLACE函式
REPLACE函式用於把某個字元或字串替換為指定的一個字元(或多個字元) , 其使用類似於TRANSLATE函式, 只是它是把一個字元或字串替換到另一個字串裡 ;
SELECT REPLACE(FIRST_NAME,'T','B' FROM EMPLOYEE_TBL) --把所有的T 替換為B
--Microsoft SQL Server、 MySQL和Oracle全都支援。
1.4 UPPER函式 把字串裡的小寫字母轉化為大寫
SELECT UPPER(CITY) FROM EMPOYEE_TBL;-- 把查出的city 大寫
--Microsoft SQL Server、 MySQL和Oracle全都支援。
1.5 LOWER函式 把字串裡的大寫字母轉化為小寫
SELECT LOWER(CITY) FROM EMPLOYEE_TBL;-- 把查出的city 轉換為小寫
--Microsoft SQL Server、 MySQL和Oracle全都支援。
1.6 SUBSTR: 獲取字串子串,但是各個DBMS實現方式不同
--Oracle
SUBSTR(列名,位置,長度)-- 即,從第幾個開始,長度為幾;位置為1的話就從第一個開始
--SQLServer 和 MySQL
SUBSTRING(列名,位置,長度) --除了函式名不同,其他一樣
--例如:
SELECT SUBSTRING(EMP_ID,1,3) FROM EMPLOYEE_TBL; --返回EMO_ID 的前3個字元
1.7 INSTR
INSTR函式用於在字串裡尋找指定的字符集, 返回其所在的位置
INSTR(列名, '字串',[開始位置 [,匹配序號]]);
--比如:
SELECT INSTR(STATE,'I',1,1) FROM EMPLOYEE_TBL;--返回每個州名裡字母I 從第一個開始算,字母第一次出現的位置。
1.8 LTRIM
LTRIM函式是另一種擷取部分字串的方式 ,從左邊檢出字串中的字元,常用來去除空格,語法如下:
LTRIM(CHARACTER STRING [,'set']);-- 剪掉字串左邊的字元,如果不加要剪掉的字元就是去除空格。
SELECT LTRIM(POSITION,'SALES') FROM EMPLOYEE_PAY_TBL;
--去掉查出的position的左邊sales字串。但是注意,如果比如‘SHIPPER’ 它也會去掉最左邊的s. LTRIM會剪除被搜尋的字串在目標字串裡最後一次出現位置之左的全部字元。
--Microsoft SQL Server、 MySQL和Oracle全都支援該函式
1.9 RTRIM
同LTRIM一樣的用法,就是去除字串右邊的字元。
1.10 LENGTH
LENGTH函式是很常見的, 用於得到字串、 數字、 日期或表示式的長度, 單位是位元組
SELECT PROD_DESC,LENGTH(PROD_DESC)FROM PRODUCETS_TBL; --返回產品描述幾長度
LENGTH(CHARACTER STRING)-- 這是語法
--MySQL和Oracle都支援該函式。 而Microsoft SQL Server則使用LEN函式來實現相同的功能
1.11 IFNULL(檢查NULL 值)
IFNULL函式用於在一個表示式是NULL時從另一個表示式獲得值。 它可以用於大多數資料型別, 但值與替代值必須是同一資料型別
IFNULL('值','替換值');
SELECT PAGER,IFNULL(PAGER,9999999999) FROM EMPOYEE_TBL;
/*只有NULL值被替換為 999 999 999。
只有MySQL支援該函式。 要實現相同的功能, Microsoft SQL Server使用 ISNULL函式, 而Oracle則使用
COALESCE函式。*/
1.12 COALESCE
COALESCE函式也是用指定值替代NULL值, 這一點與IFNULL是一樣的。 其不同點在於, 它可以接受一個資料集, 依次檢查其中每一個值, 直到發現一個非NULL值。 如果沒有找到非NULL值, 它會返回一個NULL值。
SELECT COALESCE(A欄位,B欄位,C欄位) FROM EMPLOYEE;--這只是個例子,表示返回employee表中a,b,c三個欄位中的第一個非null值。
SELECT COALESCE(NULL, NULL, 1); -- Return 1
SELECT COALESCE(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1); -- Return 1
--如果傳入的引數所有都是null,則返回null,比如
SELECT COALESCE(NULL, NULL, NULL, NULL); -- Return NULL
--所以同樣可以用來對null值進行判斷並且替換。
1.13 LPAD 函式
LPAD(左填充) 用於在字串左側新增字元或空格, 其語法如下所示:
MySQL和Oracle全都支援該函式。 遺憾的是, Microsoft SQL Server中沒有對應的函式。
LPAD(string, padded_length, [ pad_string ] )
--string:要被填充的字串,padded_length:填充之後字串長度。也就是函式返回的字串長度,如果這個數量比源字串短,就會把字串擷取
--pad_string:填充字串,是個可選引數,這個字串要貼上到string的左邊,如果這個引數未寫,就會貼上空格
--例如:
SELECT LPAD(PROD_DESC,30,'.') PRODUCT FROM PRODUCTS_TBL;
--就會再每個產品描述左側加上'.',總長度30個字元
1.14 RPAD 函式
同LPAD函式,使用相同,不同的是右填充,在字串右側新增字元或空格。
MySQL和Oracle全都支援該函式。 遺憾的是, Microsoft SQL Server中沒有對應的函式。
1.15 ASCII 函式
ASCII函式返回字串最左側字元的“美國資訊交換標準碼(ASCII),Microsoft SQL Server、 MySQL和Oracle全都支援該函式。
ASSCII('A') --返回65
ASSCII(‘B’) --返回66
2、算術函式
函式 | 說明 |
---|---|
ABS() | 返回一個絕對值 |
ROUND() | 四捨五入 |
SQRT() | 平方根 |
SIGN() | 符號 |
POWER() | 冪函式 |
CEIL() 和FLOOR() | 上限和下限,比如1.55 下限1上限2,相當於取整 |
EXP() | 返回一個數的指數 |
SIN() | 返回一個角度的正弦 |
COS() | 返回一個角度的餘弦 |
TAN() | 返回一個角度的正切 |
PI()() | 圓周率 |
使用方式都是 FUNCTION(EXPRESSION) 直接用,並且Microsoft SQL Server、 MySQL和Oracle都支援所有的算數函式 。
3、轉換函式
字元到數字;數字到字元;字元到日期;日期到字元。
3.1 字串轉換為數字
數值資料型別與字串資料型別有兩個主要的區別:
- 算術表示式和函式可以用於數值;
- 在輸出結果裡, 數值是右對齊的, 而字串是左對齊的。
對於要轉換為數值的字串來說, 其中的字元必須是 0~9。 另外加號、 減號和句點可以分別用來表示正
數、 負數和小數。
Oracle 的數值轉換函式: TO_NUMBER()
3.2 數字轉字串
一般情況下是可以隱式自動轉,SQL Server 用STR()函式 ORACLE 用 TOCHAR() 函式。
ANSCII 的 CAST函式,是可以轉換資料型別的。通用
CAST(數值,要轉換的型別)
4、日期函式
4.1獲取當前日期
資料庫系統 | 函式說明 |
---|---|
Microsoft SQL Server | GETDATE() 函式 |
MySQL | NOW() 函式 |
Oracle | SYSDATE() 函式 |
4.2 其他日期函式
DBMS | 日期函式 | 用途 |
---|---|---|
SQL Server | DATEPART | 返回日期的某個元素整數值 |
DATENAME | 返回日期的某個元素的文字值 | |
GETDATE() | 返回系統日期 | |
DATEDIFF | 返回兩個日期之間由指定日期元素表示的間隔, 比如天數、分鐘數和秒數 |
|
Oracle | NEXT_DAT | 返回指定日期滯後的下一天 |
MONTHS_BETWEEN | 返回兩個日期之間相差的月數 | |
MySQL | DAYNAME(date) | 顯示星期幾 |
DAYOFMONTH(date) | 顯示幾日 | |
DAYOFWEEK(date) | 顯示星期幾 | |
DAYOFYEAR(da’te) | 顯示一年中的第幾天 |
小結:不同的資料庫管理系統,函式的實現並不是一致的,具體的使用函式名和使用方式要看具體的資料庫系統,我們使用的時候知道有這麼個函式就行,根據公司使用的資料庫系統,去查相應的文件,用的多了就記住了。