t-sql - 存储过程 - 与smalldatetime字段输入日期和日期比较

时间:2013-12-19 09:23:12

标签: sql sql-server tsql date datetime

我必须写一个带有输入日期的存储:

CREATE PROCEDURE [dbo].[csoft_SAT_Festivita_Delete]
(
myData SMALLDATETIME
)
AS
BEGIN

...

在存储中我必须做这样的比较

SELECT
...
WHERE
myDataFiels = @myData

查找给定年/月/日的所有记录。

但如果我不进行一些转换,结果就不是我期望的结果。

  • 输入日期参数​​的最佳方法是什么?
  • 进行比较的最佳方法是什么?

在网上有很多建议,我有点困惑.... 在表中,该字段是一个小时间。 Pileggi

1 个答案:

答案 0 :(得分:3)

比较中表格字段的数据类型是什么?通常,最好与类似的数据类型进行比较。

在大多数情况下,建议使用DATETIME数据类型,因为SMALLDATETIME不符合ANSI或ISO 8601标准。

另外,你能详细说明你想要通过比较实现的目标吗?例如,如果要过滤在给定日期发生的所有记录,则应执行以下操作:

CREATE PROCEDURE [dbo].[csoft_SAT_Festivita_Delete]
(
    @myDTparam DATETIME
)
AS
BEGIN  

...

SELECT
...
WHERE
    myDTfield >= CAST(@myDTparam AS DATE) AND 
    myDTfield < CAST(@myDTparam + 1 AS DATE)

使用DATETIME数据类型时可以这样做,因为此数据类型支持整数加/减,以便添加或减去天数。此外,当您将DATETIME转换为DATE时,您会删除DATETIME值的时间部分,但仍可以将DATE值与DATETIME值进行比较{1}}值。