<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-314  評論-209  文章-0  trackbacks-0
    因為之前使用的是Oralce所以在摸索使用用Sybase很長一段時間后,總結了一下Sybase IQ的使用
      
      心得和大家分享,希望對大家會有幫助。
      
      1、字母大小寫比對不敏感,也就是在值比對判斷時大小寫字母都一樣;
      2、等值,或<>判斷,系統默認對等式兩邊比對值去右邊空格再進行比較;
      3、GROUP BY 可以根據SELECT字段或表達式的別名來 匯總,在編寫時也盡量避免SELECT 語句的別
      
      名與FROM表中的字段有重復,不然會出現莫名其妙的錯誤;
      4、FROM后的子查詢 要定義別名才可使用;
      5、存儲過程要返回IQ系統錯誤信息 SQLCODE || ERRORMSG(*) :(兩者都為EXCEPTION后第一條SQL
      
      語句才有效果);
      6、IQ中若采用 FULL JOIN 連接則不能使用 WHERE 條件,否則FULL JOIN將失效,要篩選條件則用
      
      子查詢先過濾記錄后再FULL JOIN;
      7、建表時,字段默認為非空;
      8、UPDATE語句,如果與目標表關聯的表有多條,則不會報錯,而是隨機取一條更新(第一條);
      9、RANK() OVER(PARTITION BY .. ORDER BY ..) 分組分析函數,相同的ORDER BY值,返回順序值
      
      一樣,且PARTITION BY 只支持一個字段或一個字段組(需多個字段分組的則要用 || 拼為一個字
      
      段(待確認,該問題以前碰過一次,再次驗證卻不存在這問題))
      10、返回可讀的 全局唯一字符:UUIDTOSTR(NEWID())
      11、存儲過程隱式游標語法:
      FOR A AS B CURSOR FOR SELECT ... FROM ... 
      DO
      .... 過程語句
      END FOR;
      需要注意的時,這邊的A 和 B 在 過程語句中都不能引用,所以為避免過程語句其他字段名與FOR 
      
      SELECT 語句的字段名稱重復,FOR SELECT 語句的字段最好都定義別名區分
      12、根據SELECT 語句建立[臨時]表的方法(ORACLE的CREATE TABLE)為 SELECT ..[*] INTO [#]
      
      table_name FROM ..; 其中如果在table_name加前綴#,則為會話級臨時表,否則為實體表;
      13、因Sybase為列存儲模式,在執行上INSERT語句會比UPDATE語句慢,尤其表數據越多INSERT效率
      
      就越慢;所以在ETL時建議多用UPDATE而不是INSERT
      14、雖說Sybase為列存儲模式,每個字段上都有默認索引,但對于經常的兩表的關聯鍵還是要建立
      
      索引否則會經常報QUERY_TEMP_SPACE_LIMIT不足的錯誤;
      15、存儲過程中也可以顯示的執行DDL語句,這點與Oracle不同;
      16、空字符串''在Sybase中也是個字符而不是null值,這點要注意;
      17、調整SESSION的臨時空間SET TEMPORARY OPTION QUERY_TEMP_SPACE_LIMIT = '150000'; 15000
      
      為大小,如寫0則沒限制大小
      ==================================常用函數===========================================
      字符串函數
      1)ISNULL(EXP1,EXP2,EXP3,...) :返回第一個非空值,用法與COALESCE(exp1,exp2[,exp3...])相
      
      同
      3)TRIM(exp) :去除兩邊空格
      4)DATEFORMAT(date_exp,date_format) :日期型轉字符型;
      5)STRING(exp):轉為字符型;
      6)SUBSTRING(exp,int-exp1,[int-exp2]):截取exp從int-exp1開始,截取int-exp2個字符;
      7)REPLACE(o-exp,search-exp,replace-exp):從o-exp搜索search-exp,替換為replace-exp;
      8)SPACE(int_exp):返回int個空格;
      8)UPPER(exp):轉為大寫字母,等價于UCASE(exp);
      8)LOWER(exp):轉為小寫字母,
      8)CHARINDEX(exp1,exp2):返回exp2字符串中exp1的位置!定位,exp1 查找的字符,exp2 被查找
      
      的字符串;
      8)DATALENGTH(CHAR_EXPR):在char_expr中返回字符的長度值,忽略尾空;
      8)RIGHT(char_expr,int_expr):返回char_expr右邊的int_expr個字符;
      8)LEFT(char_expr,int_expr):返回char_expr左邊的int_expr個字符;
      8)REPLICATE(char_expr,int_expr):重復char_expr,int_expr次;
      8)STUFF(expr1,start,length,expr2):用expr2代替epxr1中start起始長為length的字符串;
      8)REVERSE(char_expr):反寫char_expr中的文本;
      8)LTRIM(char_expr):刪除頭空;
      8)RTRIM(char_expr):刪除尾空;
      8)STR(float_expr[,length[,decimal]]):進行數值型到字符型轉換;
      8)PATINDEX("%pattern%",expression):返回指定樣式的開始位置,否則為0;
      8)NULLIF(exp1,exp1):比較兩個表達式,如果相等則返回null值,否則返回exp1
      8)NUMBER(*):返回序號,相當于ORACLE的rowid,但有區別;
      其他函數
      8)RANK() OVER(PARTITION BY .. ORDER BY ..) 分組分析函數,相同的ORDER BY值,返回順序值
      
      一樣,且PARTITION BY 只支持一個字段或一個字段組(需多個字段分組的則要用 || 拼為一個字
      
      段(待確認))
      8)返回可讀的 全局ID UUIDTOSTR(NEWID())
      8)COL_LENGTH(tab_name,col_name):返回定義的列長度;兼容性:IQ&ASE
      8)LENGTH(exp):返回exp的長度;兼容性:IQ
      轉換函數
      8)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),CONVERT(varchar(10),getdate(),120) ; 
      --結果 
       2010-12-31 2011-04-07
      8)CAST(exp AS data-type):返回轉換為提供的數據類型的表達式的值; 兼容性:IQ
      日期函數
      8)DAY(date_exp):返回日期天值,DAYS(date_exp,int):返回日期date_exp加int后的日期;MONTH
      
      與MONTHS、YEAR與YEARS同理;
      8)DATE(exp):將表達式轉換為日期,并刪除任何小時、分鐘或秒;兼容性:IQ
      8)DATEPART(date-part,date-exp): 返回日期分量的對應值(整數);
      8)GETDATE():返回系統時間;
      8)DATENAME(datepart,date_expr):以字符串形式返回date_expr指定部分的值,轉換成合適的名字
      
      ;
      8)DATEDIFF(datepart,date_expr1,date_expr2):返回date_expr2-date_expr1,通過指定的
      
      datepart度量;
      8)DATEADD(date-part,num-exp,date-exp):返回按指定date-part分量加num-exp值后生成的
      
      date-exp值;兼容性:IQ&ASE
      date-part日期分量代表值:
      縮寫 值
      YY 0001-9999
      QQ 1-4
      MM 1-12
      WK 1-54
      DD 1-31
      DY 1--366
      DW 1-7(周日-周六)
      HH 0-23
      MI 0-59
      SS 0-59
      MS 0-999
      數值函數
      8)CEIL(num-exp):返回大于或等于指定表達式的最小整數;兼容性:IQ&ASE;
      8)FLOOR(numeric_expr):返回小于或等于指定值的最大整數;
      8)ABS(num-exp):返回數值表達式的絕對值;兼容性:IQ&ASE;
      8)TRUNCNUM(1231.1251,2):截取數值;不四舍五入;
      8)ROUND(numeric_expr,int_expr):把數值表達式圓整到int_expr指定的精度;
      8)RAND([int_expr]):返回0-1之間的隨機浮點數,可指定基值;
      8)SIGN(int_expr):返回正+1,零0或負-1;
      8)SQRT(float_expr):返回指定值的平方根; 
      8)PI():返回常數3.1415926;
      8)POWER(numeric_expr,power):返回numeric_expr的值給power的冪;
      8)EXP(float_expr):給出指定值的指數值;
      
      ==================================常用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;
      4.修改列名:
      ALTER TABLE table_name RENAME old_column_name TO new_column_name;
      5.快速建立臨時表:
      SELECT * INTO [#]table_name FROM .....;
      6、修改表名:
      ALTER TABLE old_table_name RENAME new_table_name
      7.增加主鍵約束:
      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);
    posted on 2012-06-18 10:57 xzc 閱讀(5666) 評論(0)  編輯  收藏 所屬分類: SybaseIQ

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 最近免费中文字幕高清大全 | 最新国产精品亚洲| 91福利视频免费观看| 久久久久亚洲AV成人无码网站| 国产色无码精品视频免费| 超清首页国产亚洲丝袜| h片在线播放免费高清| 精品国产日韩亚洲一区| 中文字幕久无码免费久久| 亚洲精品高清无码视频| 久久免费国产视频| 久久综合亚洲色一区二区三区| 亚洲精品免费在线视频| 亚洲AV一二三区成人影片| 久久久www成人免费毛片| 亚洲国产精品无码久久| 国产精品无码一二区免费 | 亚洲日韩精品一区二区三区 | 88xx成人永久免费观看| 亚洲婷婷综合色高清在线| 久久精品a一国产成人免费网站 | 亚洲成综合人影院在院播放| 日韩吃奶摸下AA片免费观看| 亚洲AV无码男人的天堂| 浮力影院亚洲国产第一页| 久久久久久久久久国产精品免费| 亚洲午夜电影一区二区三区| 国产精品久久久久影院免费| 女人隐私秘视频黄www免费| 亚洲欧洲国产精品久久| 免费看国产一级特黄aa大片| 成人黄网站片免费视频| 亚洲精品福利你懂| 亚洲一区无码精品色| 91精品国产免费久久国语麻豆| 亚洲色偷偷综合亚洲av78 | 国产成人精品免费视频大全麻豆| 丰满亚洲大尺度无码无码专线| 亚洲日韩中文字幕在线播放| 免费A级毛片无码无遮挡内射| 黄网站色成年片大免费高清|