【发布时间】:2015-05-25 15:23:30
【问题描述】:
我正在开发一个更改历史记录表,我将在其中记录两种类型字段更改的旧值和新值:十进制和日期时间。
为了简单起见,我正在考虑创建一个字符串字段并将值转换为字符串,然后再存储到表中。 我的问题是,稍后我将不得不在报告中创建一个字段以显示更改之间的差异(例如,如果日期从 01/20/2015 更改为 01/27/2015,则差异将为 7 等等)。我不想在表中创建一个字段来记录字段之间的差异,我想在报表端做。
我的问题是: 有没有办法存储这两种数据(十进制和日期时间),以便以后进行比较变得简单?因为如果我将其转换为字符串类型,我将不得不对其进行两次转换 - 一次在 DB 中创建记录之前,另一次查看它们之间的区别。
【问题讨论】:
-
您可以轻松地在尾部使用
CAST(stringfield AS DATE),但我不明白您为什么不想使用DATE字段。 -
为什么不在历史中存储这些列的真实类型呢??
-
如果您要存储日期,请使用适当的数据类型,它是
DATE或DATETIME,它将允许您使用内置的 DATETIME 函数,让您的生活更轻松。您已经做出了不错的选择,即不存储值之间的差异,这是您应该在运行时执行的操作。 -
将它存储在日期时间字段中的问题是因为我也有十进制字段要存储。我将为每个字段更改创建一条新记录,因此如果有人同时更改价格和日期,它将在我的表中创建两条记录。如果我创建一个日期时间字段,我还必须创建十进制字段,并且将有 2 个字段我不会在我的记录中使用 - 如果我存储十进制,我将不使用日期时间字段,如果我存储日期时间我'不会使用小数点。
-
这不会节省你的时间,以后会成为你的痛苦
标签: sql sql-server datetime decimal