您的位置:首页 > 数据库

sql日期与随机数问题的相关整理

2011-08-05 08:45 369 查看
SELECT * FROM NORTHWIND..ORDERS ORDER BY NEWID()

--随机排序

SELECT TOP 10 * FROM NORTHWIND..ORDERS ORDER BY NEWID()

--从ORDERS 表中随机取出10 条记录

示例

A.对变量使用NEWID 函数

以下示例使用NEWID() 对声明为UNIQUEIDENTIFIER 数据类型的变量赋值。在测

试UNIQUEIDENTIFIER 数据类型变量的值之前,先输出该值。

-- CREATING A LOCAL VARIABLE WITH DECLARESET SYNTAX.

DECLARE @MYID UNIQUEIDENTIFIER

SET @MYID = NEWID()

PRINT 'VALUE OF @MYID IS '+ CONVERT(VARCHAR(255), @MYID)

下面是结果集:

VALUE OF @MYID IS 6F9619FF-8B86-D011-B42D-00C04FC964FF

注意:

NEWID 对每台计算机前往的值各不相同。所显示的数字仅起解释说明的作用。

随机函数:RAND()

在查询分析器中执行:SELECT RAND(),可以看到结果会是类似于这样的随机小数:

0.36361513486289558,像这样的小数在实际应用中用得不多,一般要取随机数都会取随机

整数。那就看下面的两种随机取整数的方法:

1、

A:SELECT FLOOR(RAND()*N) ---生成的数是这样的:12.0

B:SELECT CAST( FLOOR(RAND()*N) AS INT) ---生成的数是这样的:12

2、

A:SELECT CEILING(RAND() * N) ---生成的数是这样的:12.0

B:SELECT CAST(CEILING(RAND() * N) AS INT) ---生成的数是这样的:12

其中里面的N 是一个你指定的整数,如100,可以看出,两种方法的A 方法是带有.0

这个的小数的,而B 方法就是真正的整数了。

大致一看,这两种方法没什么区别,真的没区别?其实是有一点的,那就是他们的生成随机

数的范围:

方法1 的数字范围:0 至N-1 之间,如CAST( FLOOR(RAND()*100) AS INT)就会生成0

至99 之间任一整数

方法2 的数字范围:1 至N 之间,如CAST(CEILING(RAND() * 100) AS INT)就会生成1

至100 之间任一整数

对于这个区别,看SQL 的联机帮助就知了:

比较CEILING 和FLOOR

CEILING 函数前往大于或等于所给数字表达式的最小整数。FLOOR 函数前往小于或

等于所给数字表达式的最大整数。例如,对于数字表达式12.9273,CEILING 将前往13,

FLOOR 将前往12。FLOOR 和CEILING 前往值的数据类型都与输入的数字表达式的数

据类型相同。

现在,各位就可以根据自己需要使用这两种方法来取得随机数了^_^

另外,还要提示一下各位菜鸟,关于随机取得表中任意N 条记录的方法,很简单,就

用NEWID():

SELECT TOP N * FROM TABLE_NAME ORDER BY NEWID() ----N 是一个你指定的整

数,表是取得记录的条数.

举例:

经过测试发现:

if object_id('tb') is not null

drop table tb

create table tb (s_id int,t_id int, fenshu int)

insert into tb

select 1,1,66 union all

select 1,2,67 union all

select 2,1,65 union all

select 2,2,78 union all

select 3,1,66 union all

select 3,2,55

--这个方法可以给不同数加上不同随机数(newid( ))

select fenshu,(fenshu+cast(ceiling(RAND(CHECKSUM(NEWID()))*10)as int))as fenshu

from tb

--这个方法只能给不同数随机加上相同数(RAND( ))

select fenshu,(fenshu+cast(CEILING(RAND() * 10) AS INT))as fenshu

from tb

或者

SELECT fenshu,fenshu+cast(ceiling(RAND(CHECKSUM(rand()))*10) as int) fenshu2

FROM tb

/*------------

66 68

67 74

65 75

78 80

66 73

55 58

66 68

67 69

65 67

78 80

66 68

55 57

------------*/

Sql Server 中一个非常强大的日期格式化函数

字符串转日期

Select cast('2009-01-01' as datetime)

日期格式转换

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM

Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06

Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16

Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06

Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06

Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06

Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06

Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06

Select CONVERT(varchar(100), GETDATE(), select getdate()

2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值
例如:向日期加上2天
select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000

3. datediff 返回跨两个指定日期的日期和时间边界数。
select datediff(day,'2004-09-01','2004-09-18') --返回:17

4. datepart 返回代表指定日期的指定日期部分的整数。
select DATEPART(month, '2004-10-15') --返回 10

5. datename 返回代表指定日期的指定日期部分的字符串
select datename(weekday, '2004-10-15') --返回:星期五

6. day(), month(),year() --可以与datepart对照一下

select 当前日期=convert(varchar(10),getdate(),120)
,当前时间=convert(varchar(8),getdate(),114)

select datename(dw,'2004-10-15')

select 本年第多少周=datename(week,'2004-10-15')
,今天是周几=datename(weekday,'2004-10-15')

函数参数/功能
GetDate( )返回系统目前的日期与时间
DateDiff (interval,date1,date2)以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1
DateAdd (interval,number,date)以interval指定的方式,加上number之后的日期
DatePart (interval,date)返回日期date中,interval指定部分所对应的整数值
DateName (interval,date)返回日期date中,interval指定部分所对应的字符串名称
参数 interval的设定值如下:

缩 写(Sql Server)Access 和 ASP说明
YearYyyyyy年 1753 ~ 9999
QuarterQqq 季 1 ~ 4
MonthMmm 月1 ~ 12
Day of yearDyy一年的日数,一年中的第几日 1-366
DayDdd 日,1-31
WeekdayDww一周的日数,一周中的第几日 1-7
WeekWkww周,一年中的第几周 0 ~ 51
HourHhh 时0 ~ 23
MinuteMin 分钟0 ~ 59
SecondSss秒 0 ~ 59
MillisecondMs-毫秒 0 ~ 999
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: