【发布时间】:2021-11-17 19:10:27
【问题描述】:
我在 T-SQL 中有一个表,它有 2 列,格式如下:
Column_name Type Computed Length Prec Scale Nullable TrimTrailingBlanks FixedLenNullInSource Collation
LocCd varchar no -1 yes no yes SQL_Latin1_General_CP1_CI_AS
TimeField float no 8 53 NULL yes (n/a) (n/a) NULL
两列的值为:
LocCd Timefield
A 0.729166666666667
B 0.791666666666667
C 0.770833333333333
D 0.791666666666667
timefield 是一个有效的时间字段,当使用“时间”格式化时,excel 可以很好地读取它。但是,我无法让 SQL 识别它。这是我复制列并将其格式化为“时间”时 Excel 的样子:
loc_cd Raw time: SQL Formatted time: Excel
A 0.729166667 5:30:00 PM
B 0.791666667 7:00:00 PM
C 0.770833333 6:30:00 PM
D 0.791666667 7:00:00 PM
如何在 T-SQL 中执行此操作?我一直在搞乱的代码如下:
select loccd,
timefield
-- Ive been messing with every format I can find, below.
-- DATEADD(S, CONVERT(int,LEFT(scheduled, 10)), '1970-01-01')
from tablename;
【问题讨论】:
-
cast(0.729166666666667 as datetime) -
谁决定将时间存储为浮点数?您可能需要重新考虑这一点,因为有一个更合适的
time数据类型。 -
这能回答你的问题吗? How does CONVERT (DATETIME, FLOAT) work?
-
“
timefield是一个有效的时间字段” 事实上,它是float,而不是time,这意味着它根据定义 不是有效时间列。 -
另外,我刚刚注意到
NocID被定义为varchar(MAX)。如果它是一个 ID,为什么它需要 2GB 的大小 per 值?
标签: sql sql-server datetime