首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询必须以SELECT开头,以- can't Query开头

SQL查询必须以SELECT开头,以- can't Query开头
EN

Stack Overflow用户
提问于 2015-11-12 07:09:00
回答 2查看 111关注 0票数 0

在我的CRM系统中,我可以粘贴自己的SQL查询。添加查询表单有一个限制-它不接受不是从SELECT语句开始的查询。

我有一个从WITH语句开始的查询,但我不知道如何将它更改为从SELECT语句开始。

代码语言:javascript
复制
;WITH dRange(d) AS
(
    SELECT TOP (DATEDIFF(DAY, Convert(date, getdate()+1), GETDATE()+31)+1) 
        DATEADD(DAY, n-1, Convert(varchar(10), GETDATE()+1,120))
     FROM (SELECT n = ROW_NUMBER() OVER (ORDER BY [object_id])
      FROM sys.objects) AS x

), possible(ds, de) AS
(
    SELECT DATEADD(MINUTE, 30*rn, DATEADD(HOUR, 9, dRange.d)),
        DATEADD(MINUTE, 30*rn + 60, DATEADD(HOUR, 9, dRange.d))
    FROM (SELECT TOP (720/30) rn = ROW_NUMBER() OVER
    (ORDER BY [object_id])-1 FROM sys.objects) AS x
    CROSS JOIN dRange
)
SELECT CONVERT(VARCHAR(16), p.ds, 121) AS 'Start', CONVERT(VARCHAR(16), p.de, 121) AS 'End'
FROM possible AS p 
WHERE p.de <= DATEADD(HOUR, 16, DATEADD(DAY, DATEDIFF(DAY, 0, p.de), 0)) 

也许可以以某种方式将其包装在SELECT语句中?

EN

回答 2

Stack Overflow用户

发布于 2015-11-12 07:12:44

这似乎是一个晦涩难懂的问题,但您可以将查询结构化为嵌套子查询。在你的例子中,我认为这看起来像:

代码语言:javascript
复制
SELECT CONVERT(VARCHAR(16), p.ds, 121) AS 'Start', CONVERT(VARCHAR(16), p.de, 121) AS 'End'
FROM (SELECT DATEADD(MINUTE, 30*rn, DATEADD(HOUR, 9, dRange.d)),
             DATEADD(MINUTE, 30*rn + 60, DATEADD(HOUR, 9, dRange.d))
      FROM (SELECT TOP (720/30) rn = ROW_NUMBER() OVER (ORDER BY [object_id])-1 FROM sys.objects
           ) AS x CROSS JOIN
           (SELECT TOP (DATEDIFF(DAY, Convert(date, getdate()+1), GETDATE()+31)+1) 
                   DATEADD(DAY, n-1, Convert(varchar(10), GETDATE()+1,120))
            FROM (SELECT n = ROW_NUMBER() OVER (ORDER BY [object_id])
                  FROM sys.objects
                 ) AS x
           ) dRange
    ) p 
WHERE p.de <= DATEADD(HOUR, 16, DATEADD(DAY, DATEDIFF(DAY, 0, p.de), 0)) 
票数 1
EN

Stack Overflow用户

发布于 2015-11-12 07:32:09

多亏了戈登我找到了答案

代码语言:javascript
复制
SELECT CONVERT(VARCHAR(16), p.ds, 121) AS 'Start', CONVERT(VARCHAR(16), p.de, 121) AS 'End'
FROM (SELECT DATEADD(MINUTE, 30*rn, DATEADD(HOUR, 9, dRange.d)) as ds,
         DATEADD(MINUTE, 30*rn + 60, DATEADD(HOUR, 9, dRange.d)) as de
  FROM (SELECT TOP (720/30) rn = ROW_NUMBER() OVER (ORDER BY [object_id])-1 FROM sys.objects
       ) AS x CROSS JOIN
       (SELECT TOP (DATEDIFF(DAY, Convert(date, getdate()+1), GETDATE()+31)+1) 
               DATEADD(DAY, n-1, Convert(varchar(10), GETDATE()+1,120)) as d
        FROM (SELECT n = ROW_NUMBER() OVER (ORDER BY [object_id])
              FROM sys.objects
             ) AS x
       ) dRange
) AS p
WHERE p.de <= DATEADD(HOUR, 16, DATEADD(DAY, DATEDIFF(DAY, 0, p.de), 0))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33661563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档