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


    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.
    9273CEILING 将前往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(),: 10:57:46
    Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
    Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
    Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
    Select CONVERT(varchar(100), GETDATE(), 12): 060516
    Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
    Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
    Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
    Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
    Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
    Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
    Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
    Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
    Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
    Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
    Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
    Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
    Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
    Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
    Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
    Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
    Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
    Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
    Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
    Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
    Select CONVERT(varchar(100), GETDATE(), 112): 20060516
    Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
    Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
    Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
    Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
    Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827
    Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM
    Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM


    常用:
    Select CONVERT(varchar(100), GETDATE(),: 10:57:46
    Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
    Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
    Select CONVERT(varchar(100), GETDATE(), 12): 060516
    Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
    1.  当前系统日期、时间 
        
    select getdate()  

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

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

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

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

    6day(), 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 说明
    Year Yy yyyy 年 1753 ~ 9999
    Quarter Qq 季 1 ~ 4
    Month Mm 月1 ~ 12
    Day of year Dy y 一年的日数,一年中的第几日 1-366
    Day Dd 日,1-31
    Weekday Dw w 一周的日数,一周中的第几日 1-7
    Week Wk ww 周,一年中的第几周 0 ~ 51
    Hour Hh 时0 ~ 23
    Minute Mi 分钟0 ~ 59
    Second Ss s 秒 0 ~ 59
    Millisecond Ms - 毫秒 0 ~ 999
  • 相关阅读:
    C#中的global::system***命名空间别名限定符
    返回一个整数数组中最大子数组的和
    敏捷开发概述
    单词查找排序输出
    关于电梯调度的设计
    关于电梯调度的一些想法
    C#中抽象类和接口的区别
    SharePoint2010列表表单:用后台代码生成表单
    外刊IT评论:远离.net
    程序员:编程给你现实生活带来了哪些坏习惯
  • 原文地址:https://www.cnblogs.com/wpcnblog/p/2128128.html
Copyright © 2020-2023  润新知