Tsql 在开始时间和结束时间之间选择开始时间

Tsql 在开始时间和结束时间之间选择开始时间,tsql,Tsql,我想获取开始时间,但它不应该在开始和结束时间之间,使用另一个表的引用获取。我试过了,但出了差错。有人能帮我吗 SELECT DISTINCT right(start_time,7) AS st_time FROM Session_Info WHERE CourseName = 'Java' AND (right(start_time,7) NOT IN BETWEEN (SELECT right(start_time,7) FROM Session_In

我想获取开始时间,但它不应该在开始和结束时间之间,使用另一个表的引用获取。我试过了,但出了差错。有人能帮我吗

SELECT DISTINCT right(start_time,7) AS st_time
FROM Session_Info
WHERE CourseName = 'Java'
  AND (right(start_time,7) NOT IN BETWEEN
         (SELECT right(start_time,7)
          FROM Session_Info
          WHERE Session_Id IN
              (SELECT Session_Id
               FROM sessions
               WHERE UserId='a')) AND
         (SELECT right(end_time,7)
          FROM Session_Info
          WHERE Session_Id IN
              (SELECT Session_Id
               FROM sessions
               WHERE UserId='a')))

我也在重复使用相同的查询,比如从UserId='a'如何将其存储在变量中的会话中选择会话\u Id?

您可以将代码重写为

SELECT  DISTINCT right(start_time,7) AS st_time
FROM    Session_Info
WHERE   CourseName = 'Java'
        AND Session_ID IN (SELECT Session_ID FROM sessions WHERE UserId = 'a')
        AND NOT (right(start_time,7) BETWEEN right(start_time,7) AND right(end_time,7))
或使用CTE

;WITH mySessionIDs (Session_ID)
(
    SELECT  Session_ID
    FROM    sessions
    WHERE   UserId = 'a'
)
SELECT  DISTINCT right(si.start_time,7) AS st_time
FROM    Session_Info si
        INNER JOIN mySessionIDs
            ON si.Session_ID = mySessionIDs.Session_ID
WHERE   si.CourseName = 'Java'
        AND NOT (right(start_time,7) BETWEEN right(start_time,7) AND right(end_time,7))

你犯了什么错误?此外,中间的成对注释不是有效的语法;通常,您应该使用join语句,而不是in语句,否则查询性能会受到很大影响。在比较单个标量值和其他两个单个值时,在BEVERY关键字之间使用不正确的语法。关键字的使用不正确,子查询的使用不正确,这些子查询很可能返回一个列表/信息集,而不是单个值。也许您可以清楚地说明您需要什么数据,人们可以编写一些有效的SQL?同时告诉我们您使用的是什么数据库。sql server。我想从会话信息表中获取开始时间。该场景类似于假设我在07:00AM到09:00AM注册了java课程,这意味着当我尝试新注册时,我不能选择相同的时间,并且在注册时间之间