1

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

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

我如何将来自数据库的日期与这两个值进行比较.. 这种比较只需要在 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 转换为日期时间时出错。

4

2 回答 2

2

您可以尝试像这样使用 CAST:-

(CreatedDatetime >= CAST(CreatedON AS DATE)) AND (CreatedDatetime < CAST(CreatedEND AS DATE))
于 2013-08-20T05:55:56.900 回答
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

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

SELECT 
    CASE WHEN CreatedDatetime BETWEEN CONVERT(DATETIME, CreatedON, 105) AND
              CONVERT(DATETIME, CreatedEnd, 105) THEN 'True' ELSE 'False' END
于 2013-08-20T06:09:09.027 回答