使用 php MSSQL 转换双倍时间格式 [关闭]

Posted

技术标签:

【中文标题】使用 php MSSQL 转换双倍时间格式 [关闭]【英文标题】:Convert double timeformat with php MSSQL [closed] 【发布时间】:2018-01-03 12:09:44 【问题描述】:

我在这里遇到一个问题,用php转换一个双倍的时间。我以前从未见过。

这是excel的时间格式吗? 是否可以使用存储数据的mssql服务器来做到这一点?

以下是一些时间示例。

0.291666666666667 = 07:00:00
0.229166666666667 = 05:30:00
0.320833333333333 = 07:42:00

【问题讨论】:

这些数字是什么意思?你有相应的日期吗?正如您提到的 Excel,也许其他日期格式被错误地转换为数字(因为 Excel 不了解原始格式)? 快速谷歌搜索似乎表明它可能来自 MS Access:support.microsoft.com/en-us/help/210276/… 【参考方案1】:

猜那是时代?使用CONVERT:

WITH VTE AS(
    SELECT *
    FROM (VALUES(0.291666666666667),(0.229166666666667),(0.320833333333333))V(T))
SELECT T, CONVERT(time(0), CONVERT(datetime, t)) AS TimeValue
FROM VTE;

(2 次转换,因为您不能直接从 decimal 转换为 time

编辑:Excel(和 sql server)中的日期时间值实际上存储为数字。 SQL Server 中datetime 的值 0 是 19000101 (如果我没记错的话,0 在 Excel/Access 中是 19000100119000101;只是为了让事情变得更简单令人困惑)。每个整数都会在日期时间 0 上增加一天。因此,1 的值是 190001025 将是 19000106,等等。

时间部分也是如此,但是,这些存储为小数部分。因此,0.5 代表 12 小时。因此,值0.5 代表19000101 12:00:00.0006.75 将是 19000107 18:00:00.000。使用 Excel 和 Access,它们还将时间存储为小数(介于 0 和 1 之间)。因此,为什么上述方法有效,因为它首先将小数转换为datetime(对于第一个值19000101 07:00:00.000),然后转换为time(0)(0 表示毫秒精度为 0 点);导致07:00:00

【讨论】:

谢谢你的解决方案 @Andy 那么请标记它。 :) 我需要等 3 分钟 :-) 也为你添加了一点解释。 @andy time 以 24 小时格式显示。您提供的所有值均在 12:00 之前。

以上是关于使用 php MSSQL 转换双倍时间格式 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 将 mysql 数据库导出/转换为 mdb 格式 [关闭]

我想在 jquery 中使用碳格式时间,但我不知道如何将 jquery 数据转换为 php [关闭]

php_mssql.dll 支持 php 版本大于 >= 5.3

Android 位置将经纬度从 DMS 格式更改为双倍

mssql_bind 空字符串转换为 NULL

PHP 将 NULL 转换为 MSSQL 存储过程中的空字符串