SQL 中 2 个日期之间的 SQL 搜索
Posted
技术标签:
【中文标题】SQL 中 2 个日期之间的 SQL 搜索【英文标题】:SQL search between 2 dates in SQL 【发布时间】:2020-07-27 19:35:28 【问题描述】:我有一个需要在两个日期之间显示记录的数据库。
目前我有一个带有 2 个文本框的表单 - 一个用于 datefrom
,一个用于 dateto
。
我的计划是将这些文本框中的值格式化并存储为全局变量
DateFrom = Format(Me.DateFrom, "yyyy/mm/dd")
DateTo = Format(Me.DateTo, "yyyy/mm/dd")
然后我将使用此标准传递给名为 dateCollected 的字段的直通查询
HAVING (((Collections.DateCollected) str_to_date(datefrom, ‘%y/%m/%d’) and str_to_date(dateto, ‘%y/%m/%d’)) AND ((dbo.udfRawHazPropsList([ConsignmentNoteNumber],[ewc_code])) Is Not Null))
但是,无论我尝试什么,我都无法让它发挥作用。任何关于解决方案的想法将不胜感激!
【问题讨论】:
您的代码与 SQL Server 无关。要么解释你为什么使用 mysql 语法,要么将标签更改为你真正使用的数据库。 使用where
而不是having
。测试实际范围。
【参考方案1】:
您可以通过两种方式获取:
1.如果你的sp变量为date
类型-
DECLARE @StartDate DATE = '2020-07-23',
@EndDate DATE = '2020-07-27'
SELECT * from TableName
WHERE CreatedON between @StartDate and @EndDate --First Way
SELECT * from TableName
WHERE CreatedON >= @StartDate and CreatedON <@EndDate --Second Way
SELECT * from TableName
WHERE CreatedON between CONVERT(varchar,@StartDate,6)
and CONVERT(varchar,@EndDate,6) --Third Way
2.如果你的sp有Varchar
变量类型-
DECLARE @StartDate1 VARCHAR(50) = '2020-07-23',
@EndDate1 VARCHAR(50) = '2020-07-27'
SELECT * FROM TableName
WHERE CreatedON between CAST(@StartDate1 AS DATE)
and CAST(@EndDate1 AS DATE) --First Way
SELECT * from TableName
WHERE CreatedON >= CAST(@StartDate1 AS DATE)
and CreatedON < CAST(@EndDate1 AS DATE) --Second Way
SELECT * from TableName
WHERE CreatedON between CONVERT(varchar,Cast(@StartDate1 AS date),6)
and CONVERT(varchar,Cast(@EndDate1 AS date),6) --Third Way
在这两种方式中,您都可以更改值以获得不同的格式。
CONVERT(varchar,Cast(@EndDate1 AS date),6)
如果需要,更改第三个值以获得不同的格式。
【讨论】:
希望 OP 不使用varchar
来举行约会。
是的,对@Dale。其实没想到!!它适用于那些在表格列中执行错误的人。我只想为所有人做这件事!预期,应该是日期/日期时间。以上是关于SQL 中 2 个日期之间的 SQL 搜索的主要内容,如果未能解决你的问题,请参考以下文章