- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在此表中存储营业时间。企业可以在同一天有多个营业时间。 关闭时间可以是当天午夜之后。
CREATE TABLE [Process].[OpeningHours](
[openinghoursid] [int] IDENTITY(1,1) NOT NULL,
[businessid] [int] NOT NULL,
[daynumber] [int] NOT NULL,
[opentime] [time](7) NOT NULL,
[duration] [int] NOT NULL,
[closetime] AS (dateadd(minute,[duration],[opentime])
)
此表中的示例数据包括:
INSERT [Process].[OpeningHours]
([openinghoursid], [businessid], [daynumber], [opentime], [duration])
VALUES (79, 18, 2, CAST(N'12:00:00' AS Time), 165),
(80, 18, 2, CAST(N'18:00:00' AS Time), 240),
(81, 18, 3, CAST(N'12:00:00' AS Time), 165),
(82, 18, 3, CAST(N'18:00:00' AS Time), 240),
(83, 18, 4, CAST(N'12:00:00' AS Time), 165),
(84, 18, 4, CAST(N'18:00:00' AS Time), 240),
(85, 18, 5, CAST(N'12:00:00' AS Time), 165),
(86, 18, 5, CAST(N'18:00:00' AS Time), 240),
(87, 18, 6, CAST(N'12:00:00' AS Time), 165),
(88, 18, 6, CAST(N'18:00:00' AS Time), 300),
(89, 18, 7, CAST(N'12:00:00' AS Time), 165),
(90, 18, 7, CAST(N'18:00:00' AS Time), 600),
(91, 18, 1, CAST(N'12:00:00' AS Time), 180);
现在我想创建一个函数,该函数返回企业当前是否营业或已关闭的情况。
CREATE FUNCTION [Process].[ufnIsSpaceOpen](@businessid int)
RETURNS BIT
AS
BEGIN
DECLARE @currentdatetime DATETIME = GETDATE();
DECLARE @dayofweek INT = DATEPART(dw,@currentdatetime);
DECLARE @currentdate DATETIME = CONVERT(DATE, @currentdatetime);
DECLARE @isopen BIT;
SELECT @isopen = COUNT(*)
FROM Process.OpeningHours
WHERE
daynumber = @dayofweek
AND businessid = @businessid
AND
(
@currentdatetime >= @currentdate + CONVERT(DATETIME, opentime)
AND
@currentdatetime <=
CASE
WHEN closetime < '00:00:00' THEN @currentdate + CONVERT(DATETIME, closetime)
ELSE DATEADD(DAY,1,@currentdate) + CONVERT(DATETIME, closetime)
END
);
RETURN @isopen;
END;
GO
我正在使用 COUNT() 来查看是否有任何行与条件匹配,如果 0 匹配则表示已关闭,如果 COUNT() 大于 0 则表示已打开。当关闭时间在当天内时,此功能有效,但当关闭时间在午夜之后或当前时间在午夜之后时,此功能不起作用。
知道如何修复它吗?
编辑:感谢您的所有回复。最后我继续使用@DenisRubashkin 的解决方案。对于任何感兴趣的人来说,这是我使用的最终函数:
CREATE FUNCTION [Process].[ufnIsSpaceOpen](@businessid int)
RETURNS BIT
AS
BEGIN
DECLARE @isopen BIT;
DECLARE @Date DATETIME = GETDATE();
SELECT @isopen = COUNT(*)
FROM
(
SELECT (CAST(CAST(@Date AS DATE) AS DATETIME) + CAST(h.opentime AS DATETIME)) AS Opened,
DATEADD(mi, h.duration, (CAST(CAST(@Date AS DATE) AS DATETIME) + CAST(h.opentime AS DATETIME))) AS Closed
FROM Process.OpeningHours h
WHERE h.daynumber = DATEPART(dw, @Date)
AND businessid = @businessid
UNION
SELECT (CAST(DATEADD(day, -1, CAST(@Date AS DATE)) AS DATETIME) + CAST(h.opentime AS DATETIME)) AS Opened,
DATEADD(mi, h.duration, (CAST(DATEADD(day, -1, CAST(@Date AS DATE)) AS DATETIME) + CAST(h.opentime AS DATETIME))) AS Closed
FROM Process.OpeningHours h
WHERE h.daynumber = CASE WHEN DATEPART(dw, @Date) = 1
THEN 7
ELSE DATEPART(dw, @Date) - 1
END
AND businessid = @businessid
) w
WHERE @Date BETWEEN Opened AND Closed
RETURN @isopen;
END;
最佳答案
SQL Server 的日期/时间函数很糟糕。这是一个查询,首先获取今天工作日的开放时间并将其转换为今天的开放时间(例如,星期四 13:00 到 2017-03-30 13:00)。然后用它来检查它现在是否打开。
select count(*) as isopen
from
(
select
cast(cast(getdate() as date) as datetime) + opentime as opendatetime,
duration
from process.openinghours
where daynumber = datepart(dw, getdate())
) as today
where getdate() between opendatetime and dateadd(mi, duration, opendatetime);
您可以简单地将其应用到您的函数中,以使其更具可读性和方便性。
更新:我们也必须考虑昨天,以获得午夜以上的开放时间。感谢 Serg 指出了这一点。不幸的是,查询变得更加复杂:
select count(*) as isopen
from
(
select -- today's opening hours
cast(cast(getdate() as date) as datetime) + opentime as opendatetime,
duration
from process.openinghours
where daynumber = datepart(dw, getdate())
union all
select -- yesterday's opening hours
cast(dateadd('d', -1, cast(getdate() as date)) as datetime) + opentime as opendatetime,
duration
from process.openinghours
where daynumber % 7 + 1 = datepart(dw, getdate())
) as today_and yesterday
where getdate() between opendatetime and dateadd(mi, duration, opendatetime);
更新2:这是一个简化版本,我将所有开放时间转换为过去六天加上今天(希望我的数学正确)。我还添加了在上面的查询中忘记的businessid。
select count(*) as isopen
from
(
select
cast(dateadd('d', - (7 + datepart(dw, getdate()) - daynumber) % 7, cast(getdate() as date)) as datetime) + opentime as opendatetime,
duration
from process.openinghours
where businessid = @businessid
) as these_last_seven_days
where getdate() between opendatetime and dateadd(mi, duration, opendatetime);
关于sql - 在 T-SQL 中查找企业当前是否营业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43114296/
我一直在积极跟进 Blazor,现在我想从我的工作场所获取一个企业应用程序,并将其转换为 Blazor,并保持在企业的限制范围内。我有很多问题,但我会重点关注:在托管方面我应该从什么模型开始。 ASP
destoon实现首页显示供应、企业、资讯条数有多种方法,这里介绍的是直接调用php程序代码进行查询。destoon的模板里面是支持php的代码的,因此我们可以直接在模板里面查询出来即可。 实现代
我目前的任务是为软件开发创建一个文档化的、一致的架构指南。我们有很多聪明人在做正确的事情,但只是不一致和可重复。 我们使用 Microsoft 的应用程序架构指南 2.0 作为起点。因此,提出一个应用
我们正在使用 Zeek 以“连接日志”的形式从交换机收集网络流量。然后,连接日志通过 filebeat 存储在 Elasticsearch 索引中。每个连接日志都是一个包含以下字段的元组:(sourc
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足 Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以
我只是研究Corda enterprise,我在解压这个文件时下载了文件Corda enterprise3.zip,里面有很多文件jar。谁能帮我解释下corda enterprise的运行和使用方法
我的Apple开发者帐户中有一些有关InHouse App(企业)的预配配置文件。 如果删除那些配置文件,会有什么影响? 会影响已发布的应用程序吗? 删除它安全吗? 最佳答案 您可以删除它们: 已安装
我有一个要分发给公司员工的 iOS 应用程序。我知道为此我们需要考虑企业开发者帐户。我的疑问是我将如何分发构建。苹果是否提供企业商店?如果不是假设我通过 diawi.com 或类似的服务分发构建,将如
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
是否需要注册测试设备(UDID)?在标准程序中,每个用户设备 ID 都必须添加到开发程序中,并且构建必须使用包含 ID 列表的正确配置文件进行签名。它在企业程序中的样子如何。 最佳答案 在企业中,您不
我在 Sphinx 中已有两个数据源: source cities { ... sql_query = SELECT id, city_name, state_name, state_
我们的企业应用程序的生产 APNs 证书即将到期。 是否只是为我们的应用程序 ID 创建新的生产 APNs 证书并用我们的推送通知提供商替换即将过期的证书? 我是否需要重新捆绑和重新分发我们的企业应用
我有一个关于企业 Mac 应用程序分发的问题。我已经使用企业分发证书签署了我的 mac 应用程序,该证书有效期为 future 三年。 现在我的问题是,安装在 Mac 操作系统上的应用程序是否会在三年
我有一个只能在纽约使用的应用程序,它已经在试飞中发布。我可以将其切换到企业版吗? 最佳答案 没有“开关”,它们是两个完全不同的进程。您需要创建一个新的 Enterprise account ,创建企业
对于在供大量人员使用的大型程序中使用缓存,我还比较陌生。我知道什么是缓存以及为什么它总体上是有益的,并且我已经开始将 EHCache 集成到我使用 JSP 和 Spring MVC 的应用程序中。在我
我的应用程序 ID(MDM 应用程序)的企业 APNS 本周过期,不幸的是我没有注意到它。所以我提出了一个新请求,开始在 APP ID 中为 APNS 创建证书,然后完成请求。我可以在我的 App I
我的任务是切换框架并选择 EF 作为 ORM,但我一直在努力弄清楚如何做到这一点。我了解 N 层的基础知识,但在我们公司,我们支持 15 个以上的应用程序,我想了解我们是否应该为每个项目提供单独的 .
我正在设计一个 MySQL 数据库和一个相应的 RoR 应用程序,用于保存各种业务,每个业务都有一个地址。 此应用程序的要求是按城市/国家/地区搜索数据库(这将适用于整个欧洲/英国的企业)。搜索结果将
当使用“企业分发”选项为客户分发 iOS 应用程序时,该应用程序会下载并安装,但很快就会从主屏幕上消失。重新启动 iOS 设备后,它会重新出现。 最佳答案 在我的情况下,如果您在要保存 .ipa 文件
为了让您了解一些背景知识,我们有一个任何人都可以通过网络访问的软件应用程序。它是银行业和零售业的一个非常具体的应用程序。目前,此应用程序可在 Web 和“Windows 平板电脑信息亭”上访问,我们有
我是一名优秀的程序员,十分优秀!