sql函数 得到 由 年月日时分秒+三位内的随机数 组成的随机数

本文介绍了一种在SQL中生成包含当前日期与随机数的方法。通过创建视图存储随机数并利用函数组合日期时间,实现了在不使用Rand()的情况下生成唯一标识符。

由于函数内不能调用GetDate()以及Rand()这样的不确定函数
所以只有变通的去实现
年月日时分秒 就直接由GetDate()做为参数 传入该Function
而1~1000间的随机数 就借助于存储随机数的 视图来实现

--创建视图 V_RandNum

SET  QUOTED_IDENTIFIER  ON  
GO
SET  ANSI_NULLS  ON  
GO

CREATE   VIEW  dbo.V_RandNum
AS
SELECT   CAST ( RAND ()  *  ( 1000   -   1 +   1   AS   INT AS  P2

GO
SET  QUOTED_IDENTIFIER  OFF  
GO
SET  ANSI_NULLS  ON  
GO

--创建函数 FN_GetRandNum
SET  QUOTED_IDENTIFIER  ON  
GO
SET  ANSI_NULLS  ON  
GO


CREATE       FUNCTION  FN_GetRandNum( @DT   DATETIME )

RETURNS   BIGINT

AS

BEGIN

    
-- @P1 年月日时分秒
     DECLARE   @P1   VARCHAR ( 20 )

    
SELECT   @P1   =   CONVERT ( VARCHAR ( 20 ), @DT , 20 )  
    
SET   @P1   =   REPLACE ( @P1 , ' - ' , '' )
    
SET   @P1   =   REPLACE ( @P1 , ' : ' , '' )
    
SET   @P1   =   REPLACE ( @P1 , '   ' , '' )
    


    
-- @P2 随机数
         DECLARE   @P2   VARCHAR ( 3 )
    
SELECT   @P2 = P2  FROM  V_RandNum

    
    
-- @R  返回的值
     DECLARE   @R   CHAR ( 20 )
    
SET   @R   = @P1   +   @P2
    
    
RETURN   CAST ( @R   AS   BIGINT )

END


GO
SET  QUOTED_IDENTIFIER  OFF  
GO
SET  ANSI_NULLS  ON  
GO

--调用该函数
SELECT TestDB.dbo.FN_GetRandNum(GetDate())
--结果为
20070917143820413
### 处理年月日及毫秒的时间格式 在多种编程场景下,处理时间格式是一个常见的需求。以下是关于如何将毫秒级时间转化为年月日格式以及涉及其他相关操作的具体方法。 #### 使用 jQuery 将毫秒级时间转为年月日格式 通过 JavaScript 的 `Date` 对象可以轻松实现这一功能。下面提供了一个基于 jQuery 的函数来完成此任务: ```javascript function getFormatDate(milliseconds) { var oDate = new Date(milliseconds), oYear = oDate.getFullYear(), oMonth = ("0" + (oDate.getMonth() + 1)).slice(-2), // 补零 oDay = ("0" + oDate.getDate()).slice(-2); // 补零 var oTime = oYear + '-' + oMonth + '-' + oDay; return oTime; } ``` 上述代码片段展示了如何将毫秒级时间转换为标准的年月日格式[^1]。 #### Oracle 中计算月份差值 如果需要在数据库层面进行日期运算,比如计算两个日期之间的月份差异,则可以通过 SQL 函数实现如下逻辑: ```sql SELECT ADD_MONTHS(TRUNC(TO_DATE('2000', 'YYYY'), 'YEAR'), 12) - TRUNC(TO_DATE('2000', 'YYYY'), 'YEAR') FROM dual; ``` 这段 SQL 查询语句用于展示如何利用 `ADD_MONTHS` 和 `TRUNC` 来执行特定的日期减法操作[^2]。 #### MySQL 下生成带随机数的时间字符串 对于某些应用来说,在记录数据时附唯一标识符可能是必要的。MySQL 结合 Java 可以生成包含当前时间和额外随机序列号的数据串: ```java import org.apache.commons.lang3.time.DateFormatUtils; public class TimeUtil { public static String generateSerialNumber() { String dateStr = DateFormatUtils.format(new Date(), "yyyyMMddHHmmssSSS"); int randomPart = (int)(Math.random() * 900) + 100; // 随机三位数 return dateStr + randomPart; } } ``` 这里使用 Apache Commons Lang 库中的工具类简化了日期格式化过程,并入了简单的随机组件以增强唯一性[^3]。 #### ROS 时间戳构建方式 机器人操作系统(ROS)提供了专门的方法用来表示精确到纳秒级别的时刻点。通常情况下会先准备好各个组成部分再调用相应 API 完成最终组装工作: ```python from time import mktime import rospy def create_ros_timestamp(year, month, day, hour=0, minute=0, second=0, microsecond=0): timestamp_seconds = mktime((year, month, day, hour, minute, second, 0, 0, -1)) + microsecond / 1e6 ros_time = rospy.Time.from_sec(timestamp_seconds) return ros_time ``` 该 Python 方法说明了怎样依据给定参数建立一个完整的 ROS 时间戳实例[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值