zoukankan      html  css  js  c++  java
  • Sybase常用语句

    Sybase数据库常用sql语言

     Sybase常用函数 https://www.cnblogs.com/yilong-/p/8954439.html

    Sybase数据库查询所有表及字段

    Sybase数据库常用sql语言

    select
    d.name AS 表名,
    a.name as 字段名,
    UPPER(b.name) as 字段类型,
    a.length as 长度,
    (case when a.status =8 then 'NULL' else 'NOT NULL' end) as 是否为空
    FROM syscolumns a left join systypes b
    on a.usertype=b.usertype
    inner join sysobjects d
    on a.id=d.id and d.type='U' and d.name<>'dtproperties'
    left join syscomments e
    on a.cdefault=e.id
    where d.name LIKE 'TKT%'
    ORDER BY d.name

    查询sybase DB中占用空间最多的前20张表

     

    按照数据行数查询

    Select top 20   name,    row_count(db_id(), id) from   sysobjects order by   row_count(db_id(),id) desc

    按照分配的空间查询

    Select top 20    name,   reserved_pages(db_id(),id)/(1024.0 / (@@maxpagesize/1024.0) ) as "Allocated MB" from    sysobjects order by   reserved_pages(db_id(),id) desc

    按照已使用空间查询

    Select top 20    name,    used_pages(db_id(),id)/(1024.0 / (@@maxpagesize/1024.0) ) as "Used MB" from    sysobjects order by    used_pages(db_id(),id) desc

    1,表备份:

    --table_name1:需要备份的表; table_name2:备份后的表
    SELECT * into table_name2 from table_name1 

     2,删除列:

    ALTER TABLE table_name DELETE column_name;

     3,增加列:

    ALTER TABLE table_name ADD (column_name DATA_TYPE [NOT] NULL);

    4,修改列的空与非空:

    ALTER TABLE table_name MODIFY column_name [NOT] NULL;

    5,修改列名:

    ALTER TABLE table_name RENAME old_column_name TO new_column_name;

    6,快速建立临时表:

    SELECT * INTO table_name_new FROM table_name_old;

    7,修改表名:

    ALTER TABLE old_table_name RENAME new_table_name

    8,增加主键约束:

    ALTER TABLE tb_name ADD CONSTRAINT pk_name PRIMARY KEY(col_name,..)

    9,删除主键约束:

    ALTER TABLE tb_name DROP CONSTRAINT pk_name;

    10,建立自增长字段,与Oracle的SEQUENCE类似:

    CREATE TABLE TMP_001 (RES_ID INTEGER IDENTITY NOT NULL);

    11,添加表注释:

    COMMENT ON TABLE table_name IS '....';

    12,创建索引:

    CREATE INDEX index_name ON table_name(column_name);

     13,查询表结构:

    select * from systable a left join syscolumn b on a.table_id = b.table_id where UPPER(a.table_name)=UPPER('table_name')  order by column_name;

    14,查看所有表

    select name from sysobjects where type='U'

     15,创建表

    复制代码
    #字段前面不允许有空格,不然列的名称前面会用空格
    create table t_wlpc_shrjj(
    id INTEGER IDENTITY NOT NULL,
    rpname varchar(500) null,
    rpdate varchar(50) null,
    jjzt varchar(255) null,
    fbsjj varchar(255) null,
    etf varchar(255) null,
    lof varchar(255) null,
    fjlof varchar(255) null,
    create_date Datetime null,
    update_date Datetime null
    )
    复制代码

    16,删除表

    if exists (select 1 from sysobjects
        where id = object_id('users') and type = 'U')
        drop table users

     17,查询指定数据库的表

    select * from   sybaseiq195..T_x27_user;

     18、日期函数

    复制代码
    --1,获取当前日期时间 getdate() 
    select getdate() 
    
    --2,取指定时间的某一部分 datepart(日期部分,日期)
    --取时间的某一个部分 
    select datepart(yy,getdate()) --year 
    select datepart(mm,getdate()) --month 
    select datepart(dd,getdate()) --day 
    select datepart(hh,getdate()) --hour 
    select datepart(mi,getdate()) --min 
    select datepart(ss,getdate()) --sec 
    --取星期几 
    set datefirst 1  
    select datepart(weekday,getdate()) --weekday 
    
    --3,日期2-日期1,单位为日期部分指定 datediff(日期部分,日期1,日期2) 
    SELECT datediff(yy,'2012/12/01',getdate()) 
    SELECT datediff(mm,'2012/12/01',getdate()) 
    SELECT datediff(dd,'2012/12/01',getdate()) 
    SELECT datediff(hh,'2012/12/01',getdate()) 
    SELECT datediff(mi,'2012/12/01',getdate()) 
    SELECT datediff(ss,'2012/12/01',getdate()) 
    
    --4,计算指定时间,再加上表达式指定的时间长度 dateadd(日期部分,数值,日期) 
    SELECT dateadd(yy,1,getdate()) 
    SELECT dateadd(mm,1,getdate()) 
    SELECT dateadd(dd,1,getdate()) 
    SELECT dateadd(hh,1,getdate()) 
    SELECT dateadd(mi,1,getdate()) 
    SELECT dateadd(ss,1,getdate()) 
    
    --5,字符串时间 
    select getdate() -- '2012/12/4 10:48:07.540' 
    select convert(char,getdate(),101) -- '12/04/2012' 
    select convert(char,getdate(),102) -- '2012.12.04' 
    select convert(char,getdate(),103) -- '04/12/2012' 
    select convert(char,getdate(),104) -- '04.12.2012' 
    select convert(char,getdate(),105) -- '04-12-2012 
    select convert(char,getdate(),106) -- '04 Dec 2012' 
    select convert(char,getdate(),107) --'Dec 04, 2012' 
    select convert(char,getdate(),108) --'11:16:06' 
    select convert(char,getdate(),109) --'Dec  4 2012 10:50:28:146AM' 
    select convert(char,getdate(),110) --'12-04-2012' 
    select convert(char,getdate(),111) --'2012/12/04' 
    select convert(char,getdate(),112) --'20121204' 
    
    --6,以时间为维度的趋势查询 
    --查询一个月内的每一天 
    select convert(varchar(10), dateadd(dd, number + 1, convert(char(10), dateadd(mm, -1, getdate()), 111)), 111) dt from master .. spt_values where type = 'p'  and number < 31 
    --查询一年内的每一月 
    select convert(varchar(7),dateadd(mm,number + 1, convert(char(10), dateadd(yy, -1, getdate()), 111)), 111) dt from master .. spt_values where type = 'p'  and number < 12 
    
    --7 空处理函数 
    isnull(val1,val2)   val1为空,值为val2
    复制代码

     19,获取当前时间

    select substr(convert(varchar,getdate(*),25),0,19)
    -- 结果:

    20,删除表数据

    复制代码
    TRUNCATE TABLE:删除内容、释放空间但不删除定义。
    DELETE TABLE:删除内容不删除定义,不释放空间。
    DROP TABLE:删除内容和定义,释放空间。
    区别:
    truncate删除的更彻底,所有的日志记录都会没有,并且是一把全清,不会有where条件。
    还有个比较大的区别就是truncate后自增长的ID列也会归零,以后插入记录ID从1开始。
    但是delete后你再插入记录,ID会从上次最大的数字开始。
    delete 可以配合where条件。
    复制代码

     21,查看过程

    sp_helptext 存储过程名

     22,删除存储过程

    复制代码
    --P_add_user存储过程名
    if exists (select 1 from  sysobjects
        where id = object_id('P_add_user')
        and   type = 'P')
            drop procedure P_add_user
            go
    复制代码

    22,存储过程调用

    --存储过程带一个参数@applyid
    declare @c_applyid varchar(50)
        select @c_applyid='0135'
        execute DBA.p_process @applyid=@c_applyid 

    23,commit work 与 commit work and wait区别

    COMMIT WORK是异步的
    COMMIT WORK AND WAIT是同步的
    由于系统中COMMIT WORK的数量是有限的,比如说我们系统是4000个,同时只能提交4000个更新进程,对于COMMIT WORK来说,执行完就释放了,可以为后面的COMMIT WLRK继续使用;而对于COMMIT WORK AND WAIT是要执行完才释放的,所以对于没有必要同步更新的,也尽快使用异步,使得资源得到释放。

     24,PATINDEX用法

    复制代码
    --语法
    PATINDEX ( '%pattern%' , expression )
    --返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。
    
    --参数
    pattern 
    一个文字字符串。可以使用通配符,但 pattern 之前和之后必须有 % 字符(搜索第一个或最后一个字符时除外)。pattern 是字符串数据类型类别的表达式。
    
    expression 
    一个表达式,通常为要在其中搜索指定模式的列,expression 为字符串数据类型类别。
    
    --返回类型
    如果 expression 的数据类型为 varchar(max) 或 nvarchar(max),则为 bigint,否则为 int。
    复制代码

     25,join用法

    复制代码
    --1,Inner join:产生A和B的交集。
    SELECT * FROM test_a INNER JOIN test_b ON test_a.name =test_b.name 
    
    --2,Full outer join:产生A和B的并集。对于没有匹配的记录,则以null做为值。
    SELECT * FROM test_a FULL OUTER JOIN test_b ON test_a.name = test_b.name 
    
    --3,Left outer join:产生表A的完全集,而B表中匹配的则有值,没匹配的以null值取代。
    SELECT * FROM test_a LEFT OUTER JOIN test_b ON test_a.name = test_b.name
    
    --4,Left outer join on where:产生在A表中有而在B表中没有的集合。 
    SELECT * FROM test_a LEFT OUTER JOIN test_b ON test_a.name = test_b.name WHERE test_b.name IS NULL  
    
    --5,RIGHT OUTER JOIN:产生表B的完全集,而A表中匹配的则有值,没匹配的以null值取代。
    SELECT * FROM test_a RIGHT OUTER JOIN test_b ON test_a.name = test_b.name   
    
    --6, right outer join on where:产生在B表中有而在A表中没有的集合。
    SELECT * FROM test_a RIGHT OUTER JOIN test_b ON test_a.name = test_b.name WHERE test_a.name IS NULL   
    
    --7,FULL OUTER JOIN WHERE:产生(A表中有但B表没有)和(B表中有但A表中没有)的数据集。
    SELECT * FROM test_a FULL OUTER JOIN test_b ON test_a.name = test_b.name WHERE est_a.name IS NULL OR test_b.name IS NULL   
    复制代码

     26,存储过程采用临时表存储查询结果

    --无需定义临时表,直接使用;自动释放临时表;
    select ... into #tmp from yourtable ...
    select name from #temp_tab;

     26,插入数据

    复制代码
    --插入一条记录
    insert into A  select '1','2','3','4'
    
    --批量插入记录
    insert into A 
        select '1','2','3','4'
        union all 
        select '5','6','7','8'
        union all
        select '9','10','11','12
    复制代码

    27,根据字段值变更多个字段值

    update A  set 
    a.bbv=(case a.bby when '1'  then '100'  when '2'  then '200'  when '3'  then '300' end),
    a.bbc=(case a.bby when '1'  then 'a' when '2'  then 'b' when '3'  then 'c' end),
    a.bbf=(case a.bby when '1'  then 'e' when '2'  then 'd' when '3'  then 'f' end) 
    from A a

     28,convert(datatype,变量[,显示格式]) 用法

    --数值型字段查询条件用convert()
    select * from shrjj where id= convert(integer,23136) ;

     29,获取长度

    char_length返回的是字符数
    datalength返回的是字节数
    --获取字段最大值的最后一位值,null则取'0'
    select case when substring(max(t.pk_org),char_length(max(t.pk_org)) ,char_length(max(t.pk_org))) is null then '0' else substring(max(t.pk_org),char_length(max(t.pk_org)) ,char_length(max(t.pk_org)))  end  from dba.org t where t.pk_org like '#ZSSYB100%';

     30,获取第一条数据,并拆分、截取字符串

    复制代码
    --获取第一条记录,并且截取字符串的X后的数字
    --因为max()函数对字符的获取,异常
    select top 1 t.pk_org,
    --获取X字符的位置
    charindex('X',t.pk_org),
    --获取X字符后的数字
    char_length(t.pk_org),substring(t.pk_org, charindex('X',t.pk_org)+1 ,char_length(t.pk_org)) as x_zf,
    --case ... when
    case when substring(t.pk_org, charindex('X',t.pk_org)+1 ,char_length(t.pk_org)) is null then '0' else substring(t.pk_org, charindex('X',t.pk_org)+1 ,char_length(t.pk_org)) end as x_sz,
    --字符转数字
    convert(int,case when substring(t.pk_org, charindex('X',t.pk_org)+1 ,char_length(t.pk_org)) is null then '0' else substring(t.pk_org, charindex('X',t.pk_org)+1 ,char_length(t.pk_org)) end)+1 as x_result
    from dba.t_test t where t.pk_corp='1001' order by char_length(t.pk_org) desc,t.pk_org desc 
    复制代码

    结果:

    31,查询表对应的主键:

    select  o.name as 表名, i.column_name as 主键列名 from sysobjects o,syscolumn i   
    where o.id=i.table_id and i.pkey = 'Y' and i.table_id = 'tablename';
  • 相关阅读:
    Step one : 熟悉Unix/Linux Shell 常见命令行 (三)
    Step one : 熟悉Unix/Linux Shell 常见命令行 (一)
    PLAN: step one
    PLAN : 入门题目 ( update )
    SZU : A11 Sequence
    SZU:B85 Alec's Eggs
    codeforces 518B. Tanya and Postcard 解题报告
    BestCoder8 1001.Summary(hdu 4989) 解题报告
    hdu 1556.Color the ball 解题报告
    codeforces 515C. Drazil and Factorial 解题报告
  • 原文地址:https://www.cnblogs.com/dll102/p/13403422.html
Copyright © 2011-2022 走看看