我已经让用户输入日期时间字段,例如CreatedON
和CreatedEND
,这些字段的日期时间格式如(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转换为datetime时出错。
答案 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