Mysql 按营业时间筛选日期范围
我有一个日期范围:Mysql 按营业时间筛选日期范围,mysql,sql,openquery,Mysql,Sql,Openquery,我有一个日期范围: SET @declared_start_datetime = '11/02/2015 07:00:00' SET @declared_end_datetime = '11/09/2015 18:00:00' 直到我意识到它从11月2日上午7:00到11月9日下午6:00提取所有记录时,它才开始工作 我需要它做的是从这些日期中提取所有记录,但不包括星期六/星期天,星期一-星期五仅在7:00到18:00之间 我使用SQL Server通过链接的MYSQL服务器,所以我使用OPE
SET @declared_start_datetime = '11/02/2015 07:00:00'
SET @declared_end_datetime = '11/09/2015 18:00:00'
直到我意识到它从11月2日上午7:00到11月9日下午6:00提取所有记录时,它才开始工作
我需要它做的是从这些日期中提取所有记录,但不包括星期六/星期天,星期一-星期五仅在7:00到18:00之间
我使用SQL Server通过链接的MYSQL服务器,所以我使用OPENQUERY。这是我到目前为止的一个例子
DEClare @session varchar(max) = 'SELECT * FROM database.session WHERE CREATIONTIMESTAMP between ''''' + convert(nvarchar(50),@converted_start_datetime, 120) + ''''' and ''''' + convert(nvarchar(50),@converted_end_datetime, 120) + ''''''
SET @session = 'SELECT * INTO ##session FROM OPENQUERY(mxie,''' + @session + ''')'
exec(@session)
我如何排除周六和周日,并将其调整为只提取营业时间
编辑:
这还不排除周六或周日,但它目前返回0个结果。如果我更改AND to或,它将返回结果,但不是我想要的结果
我正在寻找周一到周五,每天从早上7:00到下午6:00。您可以利用这里的日期/时间函数来修改WHERE子句,使其更加具体。你试过使用它们吗?@MikeBrant我想不出哪一个能保持where子句整洁。我可以重新编写where子句,使其具有一组AND/OR,但这也意味着对于每一行,我的where子句必须在日期/时间上计算几个函数,这将大大降低速度。通过OPENQUERY和链接服务器,我担心运行报告的时间会被推到几分钟,不得不执行如此多的日期/时间转换。您的WHERE子句将不整洁。听起来你的整个设置都不整洁,但这是一个超出这个问题范围的主题。如果你正在为你的设置寻找一个神奇的子弹,没有一个。要获得一个简洁的解决方案,可能需要对数据库模式进行重大重构,可能需要包含一个日期/时间维度表,您可以加入该表来清理问题。@MikeBrant关于where子句有什么建议吗?我已经用当前使用的where子句更新了初始问题,但它不起作用。我不知道MySQL,我是一个SQL专家,必须使用MySQL数据库。
DEClare @session varchar(max) = 'SELECT * FROM database.session WHERE ((CREATIONTIMESTAMP between ''''' + convert(nvarchar(50),@converted_start_datetime, 120) + ''''' and ''''' + convert(nvarchar(50),@converted_end_datetime, 120) + ''''')
AND (TIME(CREATIONTIMESTAMP) between ''''' + convert(nvarchar(50),@business_opens_time, 108) + ''''' and ''''' + convert(nvarchar(50),@business_closes_time, 108) + '''''))'
SET @session = 'SELECT * INTO ##session FROM OPENQUERY(mxie,''' + @session + ''')'
exec(@session)
select * from ##session
drop table ##session