Sybase数据库常⽤sql语⾔
Sybase数据库常⽤sql语⾔
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,
sql中delete用法etf varchar(255) null,
lof varchar(255) null,
fjlof varchar(255) null,
create_date Datetime null,
update_date Datetime null
)
16,删除表
if exists (select1from 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 (select1from 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))) i
s null then'0'else substring(max(t.pk_org),char_length(max(t.pk_org)) ,char_length(max(t.pk_org))) end t where t.pk_org 30,获取第⼀条数据,并拆分、截取字符串
--获取第⼀条记录,并且截取字符串的X后的数字
--因为max()函数对字符的获取,异常
select top1 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)+1as 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';
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论