当前位置: 首页 > 面试题库 >

将datetime转换为float时,SQL的convert函数如何工作?

宿嘉庆
2023-03-14
问题内容

为什么输出此查询:

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

select convert(float, @currentdate)

…是40183吗?

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


问题答案:

DateTime通常表示为从整数部分上的预定日期(通常称为纪元)开始的天数,而在小数部分上表示从午夜开始经过的一天的百分比。

SQL
Server也不例外,因此转换为Float非常有意义。第0天是1900年1月1日00:00:00(AFAIK,没有特定的时区,因此您应将其视为“本地时间”)。

因此,您可以尝试以下操作:

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和2010年1月7日00:00:00以来已经过去了40183天

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

[编辑]该回复的日期格式已在20140416上更改为YYYYMMDD格式,这是使用SQL
Server的一些新经验(并且正如@Damien在他的评论中所说),这是唯一安全的格式。



 类似资料:
  • 问题内容: 我正在通过使用语法将字段转换为时间。 约会时间 当前输出:时间 我只需要而不是毫秒或0000 如何过滤或将其转换为精确格式。 问题答案: 不以其 显示格式 存储在SQL Server中。 因此,从用户角度来看,您可以说它 没有格式。 当然,由于它确实具有 存储格式 ,因此并不完全准确,但是作为普通用户,您不能真正使用它。 这是所有的日期和时间数据类型真: ,,,,和。 如果您需要格式,

  • 问题内容: 我正在做这个 它给了我这个 但是我想要这个 请帮忙。 问题答案: 首先将其转换为十进制, SQLFiddle演示

  • 问题内容: 将FLOAT数据类型中存储的某些数据转换为INT数据类型中存储的数据时,我遇到一些问题。以下示例说明了我的问题: 预期的结果将是: 但是,当从桌子上拿出来时,我似乎没有得到。我反而得到 有谁知道为什么会这样吗?我猜想这有点浮动的细微差别。但是我从来没有想过像上面这样的问题。有任何想法吗?在此先感谢您的帮助。 问题答案: 这是经典的(int)((0.1 + 0.7)* 10) 问题。由于

  • 问题内容: 我需要将变量中的值转换为格式化为格式的变量(无时间部分)。 我怎么做? 问题答案: 使用Microsoft Sql Server:

  • 问题内容: 我试图将datetime2转换为datetime,以便仅使用SQL或SSIS在不同源之间创建标准。以以下SQL查询为例: 我收到以下错误:“不允许从数据类型datetime2到时间戳的明确转换。” 此外,我确实使用简单的转换将datetime2转换为date。 使用SQL Server 2008或SSIS将datetime2转换为datetime的正确方法是什么? 吉利比 问题答案:

  • 问题内容: 问题: 我需要 使用ODBC转义序列 仅获取DATE(=日期,无时间)。 然而 确实将列作为datetime值(date WITH time)返回。 是否有任何 ODBC功能 我可以用得到的 日期 值 只 ? 注意: 这不是重复的问题。 我知道可以使用 非 -ODBC转换功能,例如 但出于兼容性原因,我确实需要 ODBC 函数。 问题答案: 您可以使用此: 在我可以测试的环境中运行(S