关于datetime 和 int 之间相互转换
在其他地方看到一个有点意思的东西。是记录转换规则的。
DECLARE @Date1 DATETIME = '2016-06-21 11:53:00'
, @Date2 DATETIME = '2016-06-22 13:25:00' SELECT
DATEDIFF(day, @Date1, @Date2)
, CAST(@Date2 - @Date1 AS INT)
, CAST(@Date2 AS INT) - CAST(@Date1 AS INT)
, CAST(CAST(@Date2 AS FLOAT) - CAST(@Date1 AS FLOAT) AS INT)
求每个值输出的结果是多少,我没多想,直接得出
DATEDIFF(day, @Date1, @Date2) 1
, CAST(@Date2 - @Date1 AS INT) 1
, CAST(@Date2 AS INT) - CAST(@Date1 AS INT) 1
, CAST(CAST(@Date2 AS FLOAT) - CAST(@Date1 AS FLOAT) AS INT) 1 结果放在ssms上面执行,在这个部分答案出错了
CAST(@Date2 AS INT) - CAST(@Date1 AS INT) 2 下面是解释过程
关于datetime 的数值存储,数值部分是从1900-01-01 00:00:00 开始计算的,整数部分保存和这个日期差异的天数,小数部分记录是该时间在一天里面的比例。 DATEDIFF(day, @Date1, @Date2) 结果是1不是2(不是已经多了1天有多吗?) 关于这个函数,对于day 的差值,只会精确到 day这这一层,即只对比年月日这3项。加入datediff 的参数是Month 那么,比对的项只有年和月,以此类推。所以说虽然看起来超过了一天,但是相减转换成int也是1
CAST(@Date2 - @Date1 AS INT) 1 日期的运算同上面一样。而且datetime 转换成数字也只会比对日期部分,所以答案就是1
CAST(@Date2 AS INT) - CAST(@Date1 AS INT) 2 这个就要看 cast 的转化了。对于这个例子,把日期转换成int 虽然只是跟日期部分有关,但是。这里有个特殊的地方是只要时间部分超过了12点,就会+1(相当于四舍五入),所以答案是2
CAST(CAST(@Date2 AS FLOAT) - CAST(@Date1 AS FLOAT) AS INT) 1 这里先转化成浮点,然后相减之后转换成int ,转成浮点的时候,小数位就是计算时间部分占一天的比例。这样看相减是比1多1点,燃鹅最后转换成int ,就把小数位抹掉,就是1了 这个题目虽然简单,但是也有一些我们平时使用的一些小细节,考察着我们开发人员对这些小点的关注,如果不注意的话还是有可能平时使用出现意想不到的状况的。有时候不注意,查询报表或者写语句就很容易出现什么数位溢出,转换失败之类的东东了。
这个确实要靠平时多注意,尽量少踩坑。
PS:如果说得不好或者理解有误,欢迎各位拍砖
最后我也不知道为什么,我已经超过150个字了也不允许我发╮(╯_╰)╭,我就凑一下字数,不要介意啊啊啊啊啊啊啊啊~~~
关于datetime 和 int 之间相互转换的更多相关文章
- python datetime和unix时间戳之间相互转换
python datetime和unix时间戳之间相互转换 1.代码: import time import datetime # ...
- IRandomAccessStream, IBuffer, Stream, byte[] 之间相互转换
/* * 用于实现 IRandomAccessStream, IBuffer, Stream, byte[] 之间相互转换的帮助类 */ using System;using System.IO;us ...
- bigdecimal 与long int 之间转换
BigDecimal与Long.int之间的互换 在实际开发过程中BigDecimal是一个经常用到的数据类型,它和int Long之间可以相互转换. 转换关系如下代码展示: int 转换成 BigD ...
- WebService(2)-XML系列之Java和Xml之间相互转换
源代码下载:链接:http://pan.baidu.com/s/1ntL1a7R password: rwp1 本文主要讲述:使用jaxb完毕对象和xml之间的转换 TestJava2xml.java ...
- php中 xml json 数组 之间相互转换
php中 xml json 数组 之间相互转换 1 数组转json $result = array( 'status' =>$status, 'message'=>$message, ' ...
- string,char*,int 之间的转化
c++中经常遇到string,char*,int之间的相互转化,今天就来整理一下. 以下是转载并修改的内容: 以下是常用的几种类型互相之间的转换 string 转 int先转换为char*,再使用at ...
- SAP MM 销售订单库存与普通库存之间相互转换过账后对于EBEWH以及MBEWH表的更新
SAP MM 销售订单库存与普通库存之间相互转换过账后对于EBEWH以及MBEWH表的更新 1,DEMO数据 物料号:1300009995 工厂:2160 销售订单号/item号:0010097627 ...
- C#枚举类型和int类型相互转换
C#枚举类型和int类型相互转换 C# 枚举(Enum) 枚举是一组命名整型常量.枚举类型是使用 enum 关键字声明的. C# 枚举是值数据类型.换句话说,枚举包含自己的值,且不能继承或传递继承. ...
- java string和int之间的相互转化
java 中string和int之间的相互转化 1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); ...
随机推荐
- Node.js Express 路由文件分类
前言 基于上一篇Web Api Controller分类,在MVC中我们通常要按自己的业务来划分Controller层, 好处多多,那么Express框架作为Node.js的一款MVC框架,那么自然也 ...
- 归一化变换 Normalizing transformations
归一化变换包含两个部分,图像坐标的平移和尺度的缩放.进行归一化的变换不但能够提高处理结果的精确度,而且通过选择一个标准的坐标系预先的消除了图像尺度和坐标原点的选择对算法最终结果的影响. 归一化变换的步 ...
- 如何将MyEclipse项目导入eclipse
我们经常会在网上下载一些开源项目,或者从别的地方迁移一些项目进来,但经常会发现导入后各种报错.这是初学java肯定会遇到的问题,本文对一些常见的处理方案做一个总结.(本文将MyEclipse项目导入e ...
- 你必须知道ASP.NET知识------关于动态注册httpmodule(对不起汤姆大叔)
一.关于动态注册的问题 很多人看过汤姆大叔的MVC之前的那点事儿系列(6):动态注册HttpModule ,其实汤姆大叔没有发现httpmodule动态注册的根本机制在哪里. 亦即:怎么动态注册?为什 ...
- Xamarin.Android之引导页的简单制作
0x01 前言 对于现在大部分的APP,第一次打开刚安装或更新安装的APP都会有几个引导界面,通常这几个引导页是告诉用户 APP有些什么功能或者修改了什么bug.新增了什么功能等等等. 下面就用Xam ...
- Laravel [1045] 解决方法 Access denied for user 'homestead'@'localhost'
这几天学习Laravel框架遇到了数据库方面的问题. PDOException in Connector.php line 55:SQLSTATE[HY000] [1045] Access denie ...
- struts通过action返回json
其实struts2通过action返回json挺简单的,但是就是老要忘,所以索性写在博客上.好的,开始. 首先是引入必须的jar包: struts2-json-plugin-2.3.24.jar 然后 ...
- java多线程-线程池
线程池(Thread Pool)对于限制应用程序中同一时刻运行的线程数很有用.因为每启动一个新线程都会有相应的性能开销,每个线程都需要给栈分配一些内存等等. 我们可以把并发执行的任务传递给一个线程池, ...
- 对js中this的一点点理解
1 当函数作为对象的方法被调用的时候 this就指向该对象 var o = { prop: 37, f: function() { return this.prop; } }; console.log ...
- [原][C#][winForm]分级基金折溢价WinForm网络计算器
分级基金折溢价WinForm网络计算器 通过子/母基金代码,从 [ 东方财富网,天天基金网,新浪 ] 抓取分级基金的子母基金数据(代码,名称,净值,价格), 并计算出子基金(A基金,B基金)以及母基金 ...