sql - 将日期时间转换为 float 时,SQL 的转换函数如何工作?

标签 sql sql-server tsql

为什么这个查询的输出:

declare @currentDate as datetime
    set @currentDate ='01/07/2010'

select convert(float, @currentdate) 

...是 40183 吗?

因此,对于那些对我的问题感到困惑的人,我的问题是如何在不执行上述查询的情况下知道其结果?

最佳答案

DateTime 的整数部分通常表示为从预定日期(通常称为纪元)算起的天数,小数部分表示为自午夜以来经过的天数的百分比。

SQL Server 也不异常(exception),因此转换为 Float 很有意义。第 0 天是 1900 年 1 月 1 日 00:00:00(据我所知,没有特定时区,因此您应将其视为“本地时间”)。

所以,你可以试试这个:

declare @ADate DateTime;
set @ADate = '19000101 00:00:00';
select CONVERT(float, @ADate);  --should print 0
set @ADate = '19000101 12:00:00';
select CONVERT(float, @ADate);  --should print 0.5
set @ADate = '19001231 06:00:00';
select CONVERT(float, @ADate);  --should print 364.25

因此,对于您的结果,自 01/01/1900 00:00:00 和 01/07/2010 00:00:00 以来已经过去了 40183 天

澄清:类 Unix 系统使用不同的方法来存储日期时间:自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来的秒数,这通常称为纪元时间。

[编辑] 经过几年的 SQL Server 经验(正如 @Damien 在他的评论中所说),此响应的日期格式已于 20140416 更改为 YYYYMMDD 格式,这是唯一安全的格式。

关于sql - 将日期时间转换为 float 时,SQL 的转换函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4141399/

相关文章:

c# - 快速更新 MSSQL 中的列

sql-server - SQL - 用户定义别名类型的权限

sql - 如何在 SQL Server 中的 VARCHAR 列上创建 CHECK 约束并指定最小数据长度?

mysql - 如何根据日期内销售的产品数量进行排序?

ios - FMDB sqlite 的 sql 查询不起作用

sql-server - 将表添加到新 EF 模型时,商店提供商的数据读取器出现错误消息

SQL Server - 将默认日期时间值分配给存储过程中的参数

mysql - 仅当所有行都匹配时,SQL 连接才返回结果

mysql - 简单的MySQL输出问题

sql - 存储过程 : There is already an object named '#columntable' in the database