原文html
字符串函數
1)ISNULL(EXP1,EXP2,EXP3,...) :返回第一個非空值,用法與COALESCE(exp1,exp2[,exp3...])相同express
--測試代碼 select ISNULL('EXP1','EXP2','EXP3'); --輸出結果:EXP1 select ISNULL(null,'1','EXP2','EXP3'); --輸出結果:1 select ISNULL(' ','EXP2','EXP3'); --輸出結果: select COALESCE('EXP1','EXP2','EXP3'); --輸出結果:EXP1
2)TRIM(exp) :去除兩邊空格函數
--測試代碼 select TRIM(' EXP3 '); --結果:EXP3
3)DATEFORMAT(date_exp,date_format) :日期型轉字符型;測試
--示例代碼 select DATEFORMAT(now(),'YYYYMMDD'); select DATEFORMAT(now(),'YYYY-MM-DD HH:MM:SS');
4)STRING(exp):轉爲字符型;spa
--測試代碼 select string(now()); --結果:2018-04-26 17:07:42.840
6)SUBSTRING(exp,int-exp1,[int-exp2]):截取exp從int-exp1開始,截取int-exp2個字符;code
--測試代碼 select SUBSTRING('exp',1,1); --結果:e
7)REPLACE(o-exp,search-exp,replace-exp):從o-exp搜索search-exp,替換爲replace-exp;orm
--測試代碼 select REPLACE('exp','e',1); --結果:1xp
8)SPACE(int_exp):返回int個空格;htm
--測試代碼 select '1'+SPACE(2)+'1'; --結果:1 1 --space(n) 輸出n個空格 參數n是指示空格個數的正整數。若是n爲負,則返回空字符串。
--測試代碼 n非正整數 select '1'+SPACE(-1)+'1'; --輸出結果:11 select '1'+SPACE(0)+'1'; --輸出結果:11
9)UPPER(exp):轉爲大寫字母,等價於UCASE(exp);blog
--測試代碼 select UPPER('Wed'); --結果:WED select UCASE('Wed'); --結果:WED
10)LOWER(exp):轉爲小寫字母,索引
--測試代碼 select LOWER('Wed'); --結果:wed select LCASE('Wed'); --結果:wed
11)CHARINDEX(exp1,exp2):返回exp2字符串中exp1的位置!定位,exp1 查找的字符,exp2 被查找的字符串;
--測試代碼 select CHARINDEX('w','Wed'); --結果:0 select CHARINDEX('W','Wed'); --結果:1
12)DATALENGTH(CHAR_EXPR):在char_expr中返回字符的長度值,忽略尾空;
--測試代碼 select DATALENGTH('Wed'); --3 select DATALENGTH(' Wed'); --4 select DATALENGTH(' Wed '); --5
13)RIGHT(char_expr,int_expr):返回char_expr右邊的int_expr個字符;
--測試代碼 select RIGHT('Wed',2); --結果:ed select RIGHT('Wed',12); --結果:Wed
14)LEFT(char_expr,int_expr):返回char_expr左邊的int_expr個字符;
--測試代碼 select LEFT('Wed',2); --結果:We select LEFT('Wed',12); --結果:Wed
15)REPLICATE(char_expr,int_expr):重複char_expr,int_expr次;
--測試代碼 select REPLICATE('Wed',-2); --結果: select REPLICATE('Wed',0); --結果: select REPLICATE('Wed',2); --結果:WedWed
16)STUFF(expr1,start,length,expr2):用expr2代替epxr1中start起始長爲length的字符串;
--測試代碼 SELECT STUFF('ABCDEFG',1,3,'XXXX'); --結果:XXXXDEFG SELECT STUFF('ABCDEFG',1,3,'X'); --結果:XDEFG SELECT STUFF('ABCDEFG',1,30,'X'); --結果:X
17)REVERSE(char_expr):反寫char_expr中的文本;
--測試代碼 SELECT REVERSE('ABCDEFGX'); --結果:XGFEDCBA
18)LTRIM(char_expr):刪除頭空;RTRIM(char_expr):刪除尾空;
--測試代碼 SELECT LTRIM(' ABCDEFGX '); --結果:ABCDEFGX SELECT RTRIM(' ABCDEFGX '); --結果: ABCDEFGX SELECT TRIM(' ABCDEFGX '); --結果:ABCDEFGX
19)STR(float_expr[,length[,decimal]]):進行數值型到字符型轉換。
float_expression是帶小數點的近似數字 (float) 數據類型的表達式。不要在 STR 函數中將函數或子查詢用做 float_expression。
length是總長度,包括小數點、符號、數字或空格。默認值爲 10。
decimal是小數點右邊的位數。
返回類型char
--測試代碼 select STR(23.36,5,2); --結果:23.36
20)PATINDEX("%pattern%",expression):返回指定樣式的開始位置,不然爲0;
--測試代碼 SELECT PATINDEX('%pattern%','12pattern'); --結果:3 SELECT PATINDEX('%pattern%','1pattern'); --結果:2 SELECT PATINDEX('%pattern%','pattern'); --結果:1 SELECT PATINDEX('%pattern%','attern'); --結果:0
21)NULLIF(exp1,exp1):比較兩個表達式,若是相等則返回null值,不然返回exp1
--測試代碼 SELECT NULLIF('attern','attern'); --結果:null SELECT NULLIF('attern1','attern'); --結果:attern1
22)NUMBER(*):返回序號,至關於ORACLE的rowid,但有區別;
--測試代碼 SELECT NUMBER(*); --結果:1 SELECT NUMBER(); --結果:1
其餘函數
23)RANK() OVER(PARTITION BY .. ORDER BY ..) 分組分析函數,相同的ORDER BY值,返回順序值同樣,且PARTITION BY 只支持一個字段或一個字段組(需多個字段分組的則要用 || 拼爲一個字段(待確認))???沒用過
24)返回可讀的 全局ID UUIDTOSTR(NEWID())
--測試代碼 SELECT UUIDTOSTR(NEWID()); --結果:e9ae5678-6a55-11e8-9000-cac0d0f0f292
25)COL_LENGTH(tab_name,col_name):返回定義的列長度;兼容性:IQ&ASE
26)LENGTH(exp):返回exp的長度;兼容性:IQ
--測試代碼 SELECT LENGTH(123); --結果:3 SELECT LENGTH(12.3); --結果:4 SELECT LENGTH('123'); --結果:3 SELECT LENGTH('你好'); --結果:2
轉換函數
27)CONVERT(datetype,exp[,format-style]):字符轉日期型 或DATE(exp);兼容性:IQ&ASE
format-style值 輸出:
112 yyyymmdd
120 yyyy-mm-dd hh:nn:ss
--測試代碼 SELECT CONVERT(date,'20101231',112), --'2010-12-31', CONVERT(date,'20101231',120), --null CONVERT(varchar(20),getdate(),120), --'2018-04-27 15:03:12' CONVERT(varchar(20),getdate(),112), --'20180427' CONVERT(date,getdate(),112), --'2018-04-27' CONVERT(date,getdate(),120), --'2018-04-27' getdate(); --'2018-04-27 14:55:43.851'
28)CAST(exp AS data-type):返回轉換爲提供的數據類型的表達式的值;
--測試代碼 SELECT CAST(ID AS INTEGER) FROM A; SELECT CAST(ID AS DECIMAL(18,X)) FROM A; --X指小數位)
日期函數
29)DAY(date_exp):返回日期天值,DAYS(date_exp,int):返回日期date_exp加int後的日期;MONTH與MONTHS、YEAR與YEARS同理;
--測試代碼 SELECT NOW(), --'2018-04-27 15:40:53.439'
DAY(NOW()), --4 DAYS(NOW(),1), --'2018-04-28 15:40:53.439'
MONTH(NOW()), --27 MONTHS(NOW(),1), --'2018-05-27 15:40:53.439'
YEAR(NOW()), --2018 YEARS(NOW(),1); --'2019-04-27 15:40:53.439'
30)DATE(exp):將表達式轉換爲日期,並刪除任何小時、分鐘或秒;兼容性:IQ
--測試代碼 SELECT DATE('2019-04-27 15:40:53.439'); --2019-04-27
31)DATEPART(date-part,date-exp): 返回日期份量的對應值(整數);
--測試代碼 select DATEPART(mm,'2018-04-27 14:55:43.851'); --4
32)GETDATE():返回系統時間;
--測試代碼 select now(), --結果:2018-04-26 17:07:42.840
GETDATE(); --結果:2018-04-26 17:07:42.840
33)DATENAME(datepart,date_expr):以字符串形式返回date_expr指定部分的值,轉換成合適的名字;
--測試代碼 select DATENAME(mm,'2018-04-27 14:55:43.851'); --April
select DATENAME(dd,'2018-04-27 14:55:43.851'); --27
34)DATEDIFF(datepart,date_expr1,date_expr2):返回date_expr2-date_expr1,經過指定的datepart度量;
--參數 date-part 指定要測量間隔的日期部分。 date-part 取值:year、quarter、month、week、day 和 dayofyear 用 INT。hour、minute、second、millisecond 和 microsecond 用 BIGINT。 date-expression-1 間隔的起始日期。從 date-expression-2 中減去此值,以返回這兩個參數之間 date-part 的數量。 date-expression-2 間隔的結束日期。今後值中減去 Date-expression-1,以返回這兩個參數之間 date-part 的數量。 --返回值 year、quarter、month、week、day 和 dayofyear 用 INT。hour、minute、second、millisecond 和 microsecond 用 BIGINT。
--註釋 此函數計算兩個指定日期之間日期部分的數量。結果是一個等於 date-expression-2 與 date-expression-1 之差的有符號整數值(以日期部分爲單位)。 當結果不是日期部分的偶數倍時,將會截斷而不是舍入 DATEDIFF 函數的結果。 當使用 day 做爲日期部分時,DATEDIFF 函數返回兩個指定時間之間(包括第二個日期但不包括第一個日期)的午夜數。 當使用 month 做爲日期部分時,DATEDIFF 函數返回兩個日期之間(包括第二個日期但不包括第一個日期)出現的月第一天的個數。 當使用 week 做爲日期部分時,DATEDIFF 函數返回兩個日期之間(包括第二個日期但不包括第一個日期)的星期日的個數。
--測試代碼 SELECT DATEDIFF( hour, '4:00AM', '5:50AM' ); --1 SELECT DATEDIFF( month, '1987/05/02', '1995/11/15' ); --102
35)DATEADD(date-part,num-exp,date-exp):返回按指定date-part份量加num-exp值後生成的date-exp值;兼容性:IQ&ASE
date-part日期份量表明值: | |||||||||||
縮寫 | YY | MM | WK | DD | DY | DW | HH | MI | SS | MS | |
值 | 0001-9999 | 1-4 | 1-12 | 1-54 | 1-31 | 1--366 | 1-7(週日-週六) | 0-23 | 0-59 |
0-59 | 0-999 |
--測試代碼 select now(), --2018-04-27 16:40:48.173 DATEADD(QQ,1,now()), --2018-07-27 16:40:48.173 DATEADD(WK,1,now()), --2018-05-04 16:40:48.173 DATEADD(DY,1,now()), --2018-04-28 16:40:48.173 DATEADD(DW,1,now()), --2018-04-28 16:40:48.173 DATEADD(MI,1,now()), --2018-04-27 16:41:48.173 DATEADD(MS,1,now()); --2018-04-27 16:40:48.174
數值函數
36)CEIL(num-exp):返回大於或等於指定表達式的最小整數;兼容性:IQ&ASE;
--測試代碼 select CEIL(3.0); --3 select CEIL(3.2); --4
37)FLOOR(numeric_expr):返回小於或等於指定值的最大整數;
--測試代碼 select floor(3.2); --3
select floor(3.0); --3 --floor(x),也寫作Floor(x),其功能是「向下取整」,或者說「向下舍入」,
--即取不大於x的最大整數(與「四捨五入」不一樣,下取整是直接取按照數軸上最接近要求值的左邊值,即不大於要求值的最大的那個值)。
38)ABS(num-exp):返回數值表達式的絕對值;兼容性:IQ&ASE;
39)ROUND(numeric_expr,int_expr):把數值表達式圓整到int_expr指定的精度;
--測試代碼 SELECT ROUND(2.36589,2); --2.37000 SELECT convert(numeric(10,2),round(2.36589,2)); --2.37
40)TRUNCNUM(1231.1251,2):截取數值;不四捨五入;
--測試代碼 select TRUNCNUM(1231.1251,2); --1231.1200
select TRUNCNUM(1231.1251,-2); --1200.000
41)RAND([int_expr]):返回0-1之間的隨機浮點數,可指定基值;
--測試代碼 select RAND(0), RAND(1), RAND(5), RAND(-2);
42)SIGN(int_expr):返回正+1,零0或負-1;
--測試代碼 select SIGN('int_expr'); --nulkl select SIGN(23); --1 select SIGN(0); --0 select SIGN(-69); -- -1
43)SQRT(float_expr):返回指定值的平方根;
44)PI():返回常數3.1415926;
45)POWER(numeric_expr,power):返回numeric_expr的值給power的冪;
--測試代碼 select power(2,10); --1024 select power(2,1); --2 select power(2,0); --1
46)EXP(float_expr):給出指定值的指數值; EXP(float_expr) = efloat_expr 。
--測試代碼 select EXP(0); --1 select EXP(5); --148.4131591025766
==================================經常使用DDL語句===========================================
Sybase中DDL語句不能修改字段的數據類型,只能修改空與非空:
1.刪除列:
ALTER TABLE table_name DELETE column_name;
2.增長列:
ALTER TABLE table_name ADD (column_name DATA_TYPE [NOT] NULL);
3.修改列的空與非空:
ALTER TABLE table_name MODIFY column_name [NOT] NULL;
修改列的字段類型:ALTER TABLE table_name MODIFY column_name 列屬性4.修改列名:ALTER TABLE table_name RENAME old_column_name TO new_column_name;5.快速創建臨時表:SELECT * INTO [#]table_name FROM .....;六、修改表名:ALTER TABLE old_table_name RENAME new_table_name7.增長主鍵約束:ALTER TABLE tb_name ADD CONSTRAINT pk_name PRIMARY KEY(col_name,..)8.刪除主鍵約束:ALTER TABLE tb_name DROP CONSTRAINT pk_name;9.創建自增加字段,與Oracle的SEQUENCE相似:CREATE TABLE TMP_001 (RES_ID INTEGER IDENTITY NOT NULL);10.添加表註釋:COMMENT ON TABLE table_name IS '....';11.建立索引:CREATE INDEX index_name ON table_name(column_name);