动手之前,先来看看 Ticks 在微软官方文档上的定义:

注解
一个计时周期表示一百纳秒,即一千万分之一秒。 毫秒内有 , 个计时周期,即 秒内有 , 万个计时周期。
此属性的值表示自0001年1月1日午夜 :: :: (公历日期为0001年1月1日,UTC 时间为公历)的100纳秒间隔数,表示 DateTime.MinValue。 它不包括由闰秒组成的计时周期数。

从上面的定义可知,1tick = 100纳秒,另外要弄明白几个时间单位的转换规则:
1秒 = 1000毫秒
1毫秒 = 1000微妙
1微秒 = 1000纳秒
1tick=100纳秒
1微秒=10tick

  计算公式:Ticks = (1970年01月01日00:00:00  ~ DateTime ) 的刻度值  + 621355968000000000,其中 621355968000000000 表示从 0000年00月00日00:00:00 ~ 1970年01月01日00:00:00的刻度值。下面以 2019-11-06 12:11:11.1234567 这个时间为例,演示在不同数据库上计算 Tick 的实现。

SqlServer 中的实现

SELECT (DATEDIFF_BIG(NANOSECOND,'1970-01-01','2019-11-06 12:11:11.1234567') /  + ) AS Ticks
--

MySQL 中的实现:

SELECT (TIMESTAMPDIFF(MICROSECOND,'1970-01-01','2019-11-06 12:11:11.1234560') *  + ) AS Ticks
-- 637086390711234560
-- 注意:MySQL 时间的小数位最大仅支持 6 位

Oracle 中的实现

SELECT
(((TRUNC(TO_TIMESTAMP('2019-11-06 12:11:11.1234567','yyyy-mm-dd hh24:mi:ss.ff')) - TO_DATE('1970-01-01','yyyy-mm-dd')) *
+ TO_NUMBER(TO_CHAR(TO_TIMESTAMP('2019-11-06 12:11:11.1234567','yyyy-mm-dd hh24:mi:ss.ff'),'hh24')) *
+ TO_NUMBER(TO_CHAR(TO_TIMESTAMP('2019-11-06 12:11:11.1234567','yyyy-mm-dd hh24:mi:ss.ff'),'mi')) *
+ TO_NUMBER(TO_CHAR(TO_TIMESTAMP('2019-11-06 12:11:11.1234567','yyyy-mm-dd hh24:mi:ss.ff'),'ss')) * ) *
+ TO_NUMBER(TO_CHAR(TO_TIMESTAMP('2019-11-06 12:11:11.1234567','yyyy-mm-dd hh24:mi:ss.ff'),'ff7'))
+ ) AS Ticks
FROM DUAL;
--

PostgreSQL 中的实现

SELECT
((((DATE_TRUNC('DAY','2019-11-06 12:11:11.1234560'::TIMESTAMP)::DATE - '1970-01-01'::DATE) * ::BIGINT
+ DATE_PART('HOUR', '2019-11-06 12:11:11.1234560'::TIMESTAMP) *
+ DATE_PART('MINUTE', '2019-11-06 12:11:11.1234560'::TIMESTAMP) * ) *
+ DATE_PART('MICROSECOND', '2019-11-06 12:11:11.1234560'::TIMESTAMP) * )::BIGINT
+ ::BIGINT) AS Ticks
--  
-- 注意:PostgreSQL 时间的小数位最大仅支持 位

看,最终运行结果与在 C# 代码里运行的结果都是一致的。

技术交流群:816425449

C# 计时周期数(Ticks)在不同数据库上的实现的更多相关文章

  1. MS SQL巡检系列——检查数据库上一次DBCC CHECKDB的时间

    DBCC CHECKDB检查指定数据库中的所有对象的逻辑和物理完整性,具体请参考MSDN文档.我们必须定期对数据库做完整性检查(DBCC CHECKDB),以便能及时发现一些数据库损坏(Corrupt ...

  2. 怎样将MySQL数据库上传到服务器

    首先,需要将本地的数据库导出来,作为一个数据文件,以备稍后上传到服务器用,在本地登陆phpmyadmin控制面板: 登陆成功后,在左侧选择需要操作的数据库: 选择后,页面会自动刷新,然后再在右边点击[ ...

  3. 使用Navicat for MySQL把本地数据库上传到服务器

    服务器系统基本都是基于linux的,这个数据库上传的方式适用于linux的各种版本,比如Ubuntu和Centos(尽管这两个版本各种大坑小坑,但至少在数据库传输上保持了一致性) 当然本地数据库上传到 ...

  4. 远程连接服务器或云数据库上的mysql服务 - 赖大大

    主要问题有两种: 1.mysql的权限问题. 2.服务器的防火墙和数据库的安全组没设好的问题. 1.权限问题: 首先登录上mysql mysql> use mysql;      #使用mysq ...

  5. sqlserver无法在数据库上放置锁

    由于无法在数据库 ' ' 上放置锁,ALTER DATABASE 失败.请稍后再试.消息5069,级别16,状态1,第一行ALTER DATABASE 语句失败. 解决方法: 新建查询,通过下面SQL ...

  6. Yale数据库上的人脸识别

    一.问题分析 1. 问题描述 在Yale数据集上完成以下工作:在给定的人脸库中,通过算法完成人脸识别,算法需要做到能判断出测试的人脸是否属于给定的数据集.如果属于,需要判断出测试的人脸属于数据集中的哪 ...

  7. ORA-12519, TNS:no appropriate service handler found(数据库上当前的连接数目已经超过最大值)

    报错: ORA-12519, TNS:no appropriate service handler foundThe Connection descriptor used by the client ...

  8. SQL使用链接服务器执行远程数据库上的存储过程

    原文:SQL使用链接服务器执行远程数据库上的存储过程 --创建链接服务器 exec sp_addlinkedserver'server_tmp','','SQLOLEDB','远程服务器名或ip地址' ...

  9. 系统有问题基本出在数据库上,web层无状态

    系统有问题基本出在数据库上,web层无状态.

随机推荐

  1. python简单爬虫(爬取pornhub特定关键词的items图片集)

    请提前搭好梯子,如果没有梯子的话直接403. 1.所用到的包 requests: 和服务器建立连接,请求和接收数据(当然也可以用其他的包,socket之类的,不过requests是最简单好用的) Be ...

  2. MySQL数据库从复制及企业配置实践

    在实际生产中,数据的重要性不言而喻: 如果我们的数据库只有一台服务器,那么很容易产生单点故障的问题,比如这台服务器访问压力过大而没有响应或者奔溃,那么服务就不可用了,再比如这台服务器的硬盘坏了,那么整 ...

  3. Docker Registry 管理镜像

    一.使用Docker Registry管理镜像 a.登陆docker hub  https://www.docker.com/products/docker-hub b.创建仓库 c.推送镜像   打 ...

  4. SpringBoot2+Netty打造通俗简版RPC通信框架

    2019-07-19:完成基本RPC通信! 2019-07-22:优化此框架,实现单一长连接! 2019-07-24:继续优化此框架:1.增加服务提供注解(带版本号),然后利用Spring框架的在启动 ...

  5. CentOS7 Redis5.0.5环境搭建

    CentOS7 Redis5.0.5环境搭建 1基本环境配置 CentOS Linux release 7.6.1810 (Core) redis 5.0.5 1.下载解压redis.通过wget在官 ...

  6. java工具类之Arrays、Collections以及比较器

    一.Comparable和Comparator的详解 Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部定义的方法实 ...

  7. Spring Cloud之Hystrix

    在微服务架构中,存在那么多的服务单元,若一个单元出现故障(由于网络原因或者自身原因),就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪,这样的架构相较传统架构更加不稳定.为了解决这样的问题, ...

  8. JZOJ10004 列车调度

    [JZOJ100041]列车调度 Description Input Output Sample Input Sample1: 3 1 2 3 Sample2: 9 1 3 2 4 8 6 9 5 7 ...

  9. RF页面断言

    title should be(断言title与预期指定的title内容相等): should be equal  (断言某个字符串与预期指定的字符串相等) should not be equal ( ...

  10. [BZOJ1076] 奖励关

    Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...