如何将两个给定日期与来自sql server中datetime字段的日期进行比较

时间:2013-08-20 05:49:10

标签: sql-server sql-server-2008 sql-server-2012

我已经让用户输入日期时间字段,例如CreatedONCreatedEND,这些字段的日期时间格式如(29-02-2013)和(12-04-2013)(这些仅是示例值) )

我在sql server中有一个列,如CreatedDatetime和像2013-09-03和2013-02-03这样的值(这些只是样本值) 现在我需要检查CreatedDatetime字段是否介于CreatedONCreatedEND两个给定日期之间......

如何将来自数据库的日期与这两个值进行比较.. 这种比较只需要在sql server中完成

有人会建议任何想法和解决方案吗? 非常感谢提前..

编辑:

   DECLARE  @return_value int

EXEC    @return_value = [dbo].[tp_SelectTransactionHistorySearch]
        @OffSetRowNo = 1,
        @FetchRowNo = 1,
        @StatusSelection = N's',
        @isReviewed = NULL,
        @ProjectCaseNumber = NULL,
        @CostPageNumber = NULL,
        @TransactionTypeChange = NULL,
        @DescriptionChange = NULL,
        @TrasactionCreateOnBeginDate = N'19-03-2013',
        @TransactionCreatedOnEndDate = N'20-03-2013',
        @TransactionUpdatedOnBeginDate = N'10-04-2013',
        @TransactionUpdateOnEndDate = N'11-04-2013',
        @ItemID = NULL

SELECT  'Return Value' = @return_value

GO

错误:消息8114,级别16,状态5,过程tp_SelectTransactionHistorySearch,第0行     将数据类型nvarchar转换为datetime时出错。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用CAST: -

(CreatedDatetime >= CAST(CreatedON AS DATE)) AND (CreatedDatetime < CAST(CreatedEND AS DATE))

答案 1 :(得分:0)

如果用户从其他系统/程序输入日期,则使用参数:

DECLARE @CreatedON AS DATETIME = '';
DECLARE @CreatedEND AS DATETIME = '';

SELECT 
    CASE WHEN CreatedDatetime BETWEEN @CreatedON AND @CreatedEnd 
    THEN 'True' ELSE 'False' END

但是如果值已经存储在数据库中,那么只需将字段比较为

SELECT 
    CASE WHEN CreatedDatetime BETWEEN CreatedON AND CreatedEnd 
    THEN 'True' ELSE 'False' END
FROM TimeTable

或者如果它们存储为字符串(dd-mm-yyyy),则:

SELECT 
    CASE WHEN CreatedDatetime BETWEEN CONVERT(DATETIME, CreatedON, 105) AND
              CONVERT(DATETIME, CreatedEnd, 105) THEN 'True' ELSE 'False' END