--给上例的结果指定列名
SELECT SNAME,2012-SAGE AS 'BIRTHYEAR',LOWER(SDEPT) as 'SDEPT'
FROM STUDENT
查询结果:
指定列名结果:
【SQL从入门到精通分析系列文章】为实际开发中的点点滴滴的总结,从最最简单的SQL 查询 到 综合分析查询在分析 SQL 时,也会同时分析 mybatis 、Hibernate 中的相关操作SQL从入门到精通分析系列文章 本节讲述 基本的 select 查询单表数据语句1 从单表中查询所有的行和列查询表中所有的数据select 在 SQL 中,字符 "*" 具有特殊的含义,使用用它,将从指定的表中...
我想读一个表,其中的值将是sql查询结果的列名.例如,我有table1作为..id col1 col2----------------------0 name ax0 name2 bx0 name3 cx1 name dx1 name2 ex1 name2 fx如果您看到id = 0,则name的...
一、Pivot和UnPivot介绍1.Pivot介绍PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现
PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P
完整语法:
table_source
PIVOT(
聚合函数(value_column)
FOR pivot_column
IN(&...
一.用作别名
在查询数据库时,可以用来指定列的别名:
1.如:一个table 有个column叫 id, 我们的query是select id from table1. 但是如果你不想叫id了,就可以重新命名,如叫 systemID 就可以这样写
select id as systemId from table1;
2.为聚合函数指定列名:
select student.sno,sname
from student,sc,course
where student.sno = sc.sno and sc.cno = course.cno and cname='数据库原理';
查询全体学生的姓名, 出生年份,和所在系, 并用小写字母表示所有系名,并给各列指定列名
select @m=month(@date)
select @m=case when @m between 1 and 3 then 1
when @m between 4 and 6 then 4
when @m between 7 and 9 then 7
else 10 end
select @time=datename(year,@date)+'-'+convert(varchar(10),@m)+'-01'
return datediff(day,@time,dateadd(mm,3,@time))
--按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。
Create function Get_StrArrayLength
@str varchar(1024), --要分割的字符串
@split varchar(10) --分隔符号
returns int
begin
declare @location int
declare @start int
declare @length int
set @str=ltrim(rtrim(@str))
set @location=charindex(@split,@str)
set @length=1
while @location<>0
begin
set @start=@location+1
set @location=charindex(@split,@str,@start)
set @length=@length+1
return @length
--按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便
Create function Get_StrArrayStrOfIndex
@str varchar(1024), --要分割的字符串
@split varchar(10), --分隔符号
@index int --取第几个元素
returns varchar(1024)
begin
declare @location int
declare @start int
declare @next int
declare @seed int
set @str=ltrim(rtrim(@str))
set @start=1
set @next=1
set @seed=len(@split)
set @location=charindex(@split,@str)
while @location<>0 and @index>@next
begin
set @start=@location+@seed
set @location=charindex(@split,@str,@start)
set @next=@next+1
if @location =0 select @location =len(@str)+1
--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
return substring(@str,@start,@location-@start)
select dbo.Get_StrArrayStrOfIndex('8,9,4','',4)
--结合上边两个函数,象数组一样遍历字符串中的元素
create function f_splitstr(@SourceSql varchar(8000),@StrSeprate varchar(100))
returns @temp table(F1 varchar(100))
begin
declare @ch as varchar(100)
set @SourceSql=@SourceSql+@StrSeprate
while(@SourceSql<>'')
begin
set @ch=left(@SourceSql,charindex(',',@SourceSql,1)-1)
insert @temp values(@ch)
set @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'')
return
select * from dbo.f_splitstr('1,2,3,4',',')
--全角和半角转换函数
Create FUNCTION f_Convert(
@str NVARCHAR(4000), --要转换的字符串
@flag bit --转换标志,0转换成半角,1转换成全角
)RETURNS nvarchar(4000)
BEGIN
DECLARE @pat nvarchar(8),@step int,@i int,@spc int
IF @flag=0
Select @pat=N'%[!-~]%',@step=-65248,
@str=REPLACE(@str,N' ',N' ')
Select @pat=N'%[!-~]%',@step=65248,
@str=REPLACE(@str,N' ',N' ')
SET @i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
WHILE @i>0
Select @str=REPLACE(@str,
SUBSTRING(@str,@i,1),
NCHAR(UNICODE(SUBSTRING(@str,@i,1))+@step))
,@i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
RETURN(@str)
declare @s1 varchar(8000)
select @s1='中 2-3456a78STUVabn中国opwxyz'
select dbo.f_convert(@s1,0),dbo.f_convert(@s1,1)
函数返回值是表
create table test(id int primary key,name char(10))
insert into test values(1,'test1')
insert into test values(2,'test2')
insert into test values(3,'test3')
insert into test values(4,'test4')
1、标量函数
create function return_count()
returns int
begin
declare @count int
select @count=count(*) from test
return @count
select dbo.return_count() cont --count为显示的列头
--运行结果
--count
sql删除重复的记录
打开测试数据库test,并以表w01为例,将下面的SQL语句放入sql2000查询分析器中,一段一段执行即可看到效果
---在sql2000下创建测试数据表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[w01]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[w01]
---在sql2005下创建测试数据表,如果是sql2005则用本段来判断数据表是否存在
---if exists(select 1 from sys.tables where name='w01')
---drop table w01
----开始创建测试数据库
create table w01(gs903 varchar(32),gs1002 varchar(32))
insert into w01
select '1','a'
union all select '1','a'
union all select '1','a'
union all select '2','a'
union all select '2','e'
union all select '3','b'
union all select '3','d'
select * from w01
---为表w01添加一个可以表示唯一标示的自增字段ID
alter table w01 add [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL
---查询删除前的数据和记录数:7
select * from w01
select count(*) from w01
---查询具有重复记录的所有记录;3
select gs903,gs1002,count(*) as count from w01 group by gs903,gs1002
having count(*)>1
order by count desc
---删除重复的数据:2行
delete from w01 where id not in (select max(id) from w01 group by gs903,gs1002)
---看看删除后还有没有重复记录:0
select gs903,gs1002,count(*) as count from w01 group by gs903,gs1002
having count(*)>1
order by count desc
---删除后的数据和记录数:7-2=5
select * from w01
select count(*) from w01
用SQL语句添加删除修改字段
alter table docdsp add dspcode char(200)
Alter TABLE table_NAME Drop COLUMN column_NAME
修改字段类型
Alter TABLE table_name Alter COLUMN column_name new_data_type
sp_rename
更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。
sp_rename [ @objname = ] 'object_name' ,
[ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
--假设要处理的表名为: tb
--判断要添加列的表中是否有主键
if exists(select 1 from sysobjects where parent_obj=object_id('tb') and xtype='PK')
begin
print '表中已经有主键,列只能做为普通列添加'
--添加int类型的列,默认值为0
alter table tb add 列名 int default 0
begin
print '表中无主键,添加主键列'
--添加int类型的列,默认值为0
alter table tb add 列名 int primary key default 0