T-SQL 更新的日期字段与 select 语句中的日期格式不同
T-SQL Updated date field not the same as date format in select statement
在 SQL Server 2008 数据库中,我有一个财政年度 table,其中每个财政期间的 end_date 设置错误。句点 start_date 是日历月的第一天午夜,格式为 smalldatetime (2015-01-01 00:00:00
)。 end_date 应该 是 start_date 月份 (2015-01-31 23:59:59
) 最后一天的最后一秒。两个字段的数据类型都是smalldatetime.
下面给出了我希望 放入 end_date 字段中的所需日期和时间:
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,start_date)+1,0))
但它会在时间结束时增加毫秒数:2015-01-31 23:59:59.000
当我尝试将其转换或转换为 smalldatetime 以省略毫秒时,它会将时间设置为 start_date 月份最后一天的 午夜:2015-01-31 00:00:00
。如果我只是用上面 select 语句中的代码更新 end_date 字段,也会发生这种情况。
如何使用正确的格式和值 (2015-01-31 23:59:59
) 更新 end_date?
smalldatetime 不存储秒数,它总是 00
。这就是减去一秒时自动转换的原因。
如果要存储秒数,则必须将列转换为不同的数据类型。
我没有意识到 smalldatetime 不存储秒数。 KekuSemau 的回答不是很正确,但它确实让我意识到我没有尝试做正确的事情,考虑到我必须更新的列的数据类型(不,我无法更改列的数据类型).
我所要做的就是调整查询以减去 minute 与 second,smalldatetime 字段将与之一起使用:
cast(DATEADD(MINUTE,-1,DATEADD(mm, DATEDIFF(m,0,start_date)+1,0)) as smalldatetime)
所以我最终根据需要用 2015-01-31 23:50:00
更新了 end_date 列。
在 SQL Server 2008 数据库中,我有一个财政年度 table,其中每个财政期间的 end_date 设置错误。句点 start_date 是日历月的第一天午夜,格式为 smalldatetime (2015-01-01 00:00:00
)。 end_date 应该 是 start_date 月份 (2015-01-31 23:59:59
) 最后一天的最后一秒。两个字段的数据类型都是smalldatetime.
下面给出了我希望 放入 end_date 字段中的所需日期和时间:
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,start_date)+1,0))
但它会在时间结束时增加毫秒数:2015-01-31 23:59:59.000
当我尝试将其转换或转换为 smalldatetime 以省略毫秒时,它会将时间设置为 start_date 月份最后一天的 午夜:2015-01-31 00:00:00
。如果我只是用上面 select 语句中的代码更新 end_date 字段,也会发生这种情况。
如何使用正确的格式和值 (2015-01-31 23:59:59
) 更新 end_date?
smalldatetime 不存储秒数,它总是 00
。这就是减去一秒时自动转换的原因。
如果要存储秒数,则必须将列转换为不同的数据类型。
我没有意识到 smalldatetime 不存储秒数。 KekuSemau 的回答不是很正确,但它确实让我意识到我没有尝试做正确的事情,考虑到我必须更新的列的数据类型(不,我无法更改列的数据类型).
我所要做的就是调整查询以减去 minute 与 second,smalldatetime 字段将与之一起使用:
cast(DATEADD(MINUTE,-1,DATEADD(mm, DATEDIFF(m,0,start_date)+1,0)) as smalldatetime)
所以我最终根据需要用 2015-01-31 23:50:00
更新了 end_date 列。