标题: 开发总结之数据库
- oec2003 2008-04-12 13:33 阅读:573
- 评论:5 查看评论 | 添加评论
    本文是我在平时工作中所遇到的数据库方面的一些知识总结
1.多条件查询
    多条件查询在实际应用中用的很多,在一些页面上会要求根据时间,类别,或是其他的一些关键字来查询数据,而且这些条件并不是一定要输入的。以前有过在C#代码中根据条件选中的情况来拼where条件字串,也有过在存储过程中用if来判断传进的参数,但是后来知道早存储过程中使用OR是最简单的,如下:

[图片]create Table Users
[图片](
[图片]    id int,
[图片]    name nvarchar(20),
[图片]    age int
[图片])
[图片]
[图片]create proc sp_SGetUserInfo
[图片](
[图片]  @Name nvarchar(20),
[图片]  @Age int
[图片])
[图片]as
[图片]select 
[图片]    *
[图片]from
[图片]    Users
[图片]where
[图片]    (@Name='' or name=@Name)
[图片]and
[图片]    (@Age='' or age=@Age)
[图片]

2.使用isnull
    对于传进的参数有可能为空或是null的情况,isnull就很有用了。 通常可以这样来判断

[图片]ISNULL(@Name,'')  --如果参数@Name为null,则返回''

3.在数据库中几个常用的日期格式转换
    日期格式转换也是经常用到的,通常2008-04-12和20080412 这两种格式用的比较多,下面列出一些常用的:
[图片]CONVERT(VARCHAR(10),GETDATE(),120)
[图片]--返回2008-04-12
[图片]CONVERT(VARCHAR(10),GETDATE(),20)
[图片]--返回2008-04-12
[图片]CONVERT(VARCHAR(10),GETDATE(),112)
[图片]--返回20080412
[图片]CONVERT(VARCHAR(10),GETDATE(),111)
[图片]--返回2008/04/12

4.取指定字符串中两个字符 中间的字符串

[图片]declare @str1 nvarchar(20)
[图片]declare @str2 nvarchar(20)
[图片]declare @str3 nvarchar(20)
[图片]set @str1 = 'ABCDEFGH'
[图片]set @str2 = 'ab' 
[图片]set @str3 = 'f'
[图片]
[图片]declare @a int  ,@b int 
[图片]set @a=CHARINDEX(right(@str2,1),@str1) --第二个字符串的最后一个字符的索引
[图片]set @b=CHARINDEX(left(@str3,1),@str1)  --第三个字符串的第一个字符的索引
[图片]
[图片]
[图片]select substring(@str1,@a+1,@b-@a-1)  --结果取得是 第二个字符串和第三个字符串中间的字符
[图片]
[图片]

5.一个实现拆分由特殊符分隔的字符串的函数

[图片]ALTER   FUNCTION split
[图片](
[图片]  @StrAll varchar(8000),
[图片]  @StrSeprate varchar(10)
[图片])
[图片]RETURNS @temp TABLE(F1 VARCHAR(100))    
[图片]AS
[图片]BEGIN
[图片]    DECLARE @i INT
[图片]    SET @StrAll =rtrim(ltrim(@StrAll ))
[图片]    SET @i=charindex(@StrSeprate,@StrAll )
[图片]    WHILE @i>=1
[图片]    BEGIN
[图片]        INSERT @temp VALUES(left(@StrAll ,@i-1))
[图片]        SET @StrAll =substring(@StrAll ,@i+1,len(@StrAll )-@i)
[图片]        SET @i=charindex(@StrSeprate,@StrAll )
[图片]    END
[图片]    IF @StrAll <>''
[图片]    INSERT @temp VALUES(@StrAll )
[图片]    RETURN
[图片]END


6.取出数据库中所有的表名

[图片]select name as  tablename from sysobjects where type='U' and name<>'dtproperties'

7.sqlserver中取随机数的两种方法
   a.创建一个表Rand,字段是:RandomNum ,存储0到9的数据。
      使用下面SQL语句可产生随机数:

[图片]select top 1 RandomNum from Rand order by NewID()
[图片]

   b.使用sqlserver提供的Rand()函数

[图片]select cast( floor(rand()*N) as int) 
[图片]--产生0到N-1之间的随机数
[图片]select cast(ceiling(rand() * N) as int)
[图片]--产生1到N之间的随机数

8.数据库中的集合运算(交, 并 ,差)
先创建示例表
[图片]create table T1
[图片](
[图片]    id int
[图片])
[图片]
[图片]create table T2
[图片](
[图片]    id int
[图片])
[图片]insert T1
[图片]select 1 union all
[图片]select 2 union all
[图片]select 3 union all
[图片]select 4 
[图片]
[图片]insert T2
[图片]select 3 union all
[图片]select 4 

运算代码:
[图片]--交集
[图片]----------------------------------------------
[图片]--方法1 
[图片]select *  from T1
[图片]intersect
[图片]select * from T2
[图片]--方法2
[图片]select distinct 
[图片]    *  
[图片]from 
[图片]    T1
[图片]where 
[图片]    T1.id in (select id from T2)
[图片]--方法3
[图片]select distinct
[图片]    *
[图片]from
[图片]    T1
[图片]where exists(select id from T2 where T2.id=T1.id)
[图片]
[图片]--in和exists 的不同是in只能判断唯一列,而exists可以判断多列
[图片]---------------------------------------------------
[图片]
[图片]--并集
[图片]select *  from T1
[图片]union all
[图片]select * from T2
[图片]----------------------------------------------------
[图片]--差集
[图片]select *  from T1
[图片]except
[图片]select * from T2

返回结果就不写了,呵呵,大家运行一下就知道了。


不断更新中........

查看评论 | 添加评论
返回顶部 | 返回首页