我对SQL比较陌生,所以请原谅我,如果这是一个愚蠢的问题。现在我一直在尝试太久以使其发挥作用。将float(YYYY)转换为datetime
我在表A中有一列是一个名为ConstructionYear的浮动列。它有一个简单的4位数年份(即2010年,2005年,1972年等)。我需要使用这些年来填充表B的YearBuilt日期时间字段。我搜索并搜索并尝试了各种我在网上找到的convert()和cast()的不同组合,但它不起作用。
我想发生是这样的:
'2008' - > '2008-01-01 00:00:00.000'
'2005' - >“2005-01- 01 00:00:00.000'
'1986年' - > '1986年1月1日00:00:00.000'
而不是什么正在发生的事情(使用CAST(ConstructionYear AS DATETIME)
):
'2008' - > '1905年7月2日00:00:00.000'
'2010' - > '1905年7月4日00:00:00.000'
'1984' - > '1905年6月8日00:00:00.000'
编辑:解决方法:cast(convert(varchar,@ConstructionYear) AS DATETIME)
所以我的问题有2个主要原因(比我是新来的SQL等)。
我不知道SQL Server用于datetime的1900年代。因为1905年的所有日期我都看到了,但我不知道它是在考虑我的2005年并将它算作1900年的日子。
1753年。为什么1753年我们可以使用最早的一年?在我发布我的问题之前,我可能在某个时候使用了正确的语法,但它没有运行,因为我的数据在1753年前已经有好几年了。我认为错误与我的代码有关。
在这种情况下,Float似乎是一种存储整数的不好方法。根据字段的填充方式,你可能会稍微偏离需要被截断或舍入到(小)int或char(4) – automatic 2012-07-12 23:02:05
之前舍入的值。同意,int列会更合适,以免得到一个1984.535在那里以某种方式 – Ghost 2012-07-12 23:08:37
同意。我不幸地无法控制这些表格的结构,或者它们最初是如何由我们的客户填充的。 – tkrex 2012-07-12 23:25:44