Sybase經常使用函數

原文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 QQ 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);

相關文章
相關標籤/搜索