关于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]); ...
随机推荐
- PHP中curl_init函数用法
使用PHP的cURL库可以简单和有效地去抓网页.你只需要运行一个脚本,然后分析一下你所抓取的网 页,然后就可以以程序的方式得到你想要的数据了.无论是你想从从一个链接上取部分数据,或是取一个XML文件并 ...
- jQuery-1.9.1源码分析系列(二)jQuery选择器续1
在分析之前说一点题外话. ownerDocument和 documentElement的区别 ownerDocument是Node对象的一个属性,返回的是某个元素的根节点文档对象:即document对 ...
- HTML特殊符号汇总
较常用的飘黄处理了 ´ ´ © © > > µ µ ® ® & & ° ° ¡ ¡ » » ¦ ¦ ÷ ÷ ¿ ¿ ¬ ¬ § § • • ½ ½ « « ¶ ¶ ¨ ...
- Java进击C#——语法之基础
本章简言 上一章讲到关于项目工程开发常用的知识点,有了前面俩章的介绍之后.本章正式开始介绍关于C#的基础语法.我们都很清楚C#也是面向对象的计算机语言.而且他跟JAVA的相似度高达80%.所以很多语法 ...
- 实体之间的关系【Entity Relationships】(EF基础系列篇9)
Here, you will learn how entity framework manages the relationships between entities. Entity framewo ...
- 用NPOI从DataBase到Excel '2
NPOI的C# Helper代码2 public static MemoryStream ExportXls(DataTable dt) { HSSFWorkbook wk = new HSSFWor ...
- 探索DOMNode
实现代码 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8& ...
- C#编程总结--总目录
C#编程总结--总目录 多年的C#实战经历,希望通过一个系列课程对C#编程做系统总结. 总结过去,展望未来.新的一年,新的征程,新的开始! 希望我们在2014梦想成真,马到成功! 1.C#编程总结(一 ...
- Python爬虫入门一之综述
大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章作为参考,也欢迎大家一共分享学习经验. Pyth ...
- http 缓存相关学习
在面试中被问到好多缓存的问题 200 cache cookies 304(304 和 200 cache的区别) cookies在什么时候创建 发送 等等 自己回答的并不是很好 这次仔细的学习 ...