如何从以下 SQL 查询中仅返回 yyyy-mm-dd [重复]

Posted

技术标签:

【中文标题】如何从以下 SQL 查询中仅返回 yyyy-mm-dd [重复]【英文标题】:How to return just the yyyy-mm-dd from the following SQL queries [duplicate] 【发布时间】:2018-07-03 20:15:36 【问题描述】:

以下是我创建的查询。查询#1 返回2018-07-06 00:00:00.000,查询#2 返回2018-07-31 23:59:59.997

我不知道如何修改查询,以便它们以yyyy-mm-dd 格式返回结果。请指教。

查询 #1 - 获取每月的第五个工作日

SELECT 
    FifthWeekDay = DATEADD(dd, CASE 
                                  WHEN DATEDIFF(dd, -1, ca.FirstOfMonth) % 7 > 1 -- -1 is a Sunday
                                     THEN 7 
                                     ELSE 6 - DATEDIFF(dd, -1, ca.FirstOfMonth) % 7 -- -1 is a Sunday
                               END, ca.FirstOfMonth - 1)
FROM 
    (SELECT 
         DATEADD(mm, (SELECT DATEPART(YEAR, GETDATE())) * 12 - 22801 +
                     (SELECT DATEPART(M, GETDATE())), 0)) ca(FirstOfMonth)

查询 #2 - 获取本月的最后一个工作日

SELECT 
    DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0))
    - CASE DATENAME(dw, DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0)))
         WHEN 'SUNDAY' THEN 2
         WHEN 'SATURDAY' THEN 1
         ELSE 0
      END AS LastBusinessCurrentMonth

【问题讨论】:

您使用的是哪个 dbms? (这些查询是特定于产品的。) jarlh- 我正在使用 SQL Server 2014 【参考方案1】:

您可以对已有的结果进行子查询并添加演员表(作为日期):

SELECT CAST(LastBusinessCurrentMonth AS DATE) AS LastBusinessCurrentMonth FROM(
SELECT 
    DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0))
    - CASE DATENAME(dw, DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0)))
         WHEN 'SUNDAY' THEN 2
         WHEN 'SATURDAY' THEN 1
         ELSE 0
      END AS LastBusinessCurrentMonth) AS X

SELECT CAST(FIFTHWEEKDAY AS DATE) AS FIFTHWEEKDAY FROM(
SELECT 
    FifthWeekDay = DATEADD(dd, CASE 
                                  WHEN DATEDIFF(dd, -1, ca.FirstOfMonth) % 7 > 1 -- -1 is a Sunday
                                     THEN 7 
                                     ELSE 6 - DATEDIFF(dd, -1, ca.FirstOfMonth) % 7 -- -1 is a Sunday
                               END, ca.FirstOfMonth - 1)
FROM 
    (SELECT 
         DATEADD(mm, (SELECT DATEPART(YEAR, GETDATE())) * 12 - 22801 +
                     (SELECT DATEPART(M, GETDATE())), 0)) ca(FirstOfMonth)) AS X

或者您可以将变量声明为 Date 并将查询结果设置为该变量:

DECLARE @DATEVAR DATE

SET @DATEVAR =(
SELECT 
    DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0))
    - CASE DATENAME(dw, DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0)))
         WHEN 'SUNDAY' THEN 2
         WHEN 'SATURDAY' THEN 1
         ELSE 0
      END AS LastBusinessCurrentMonth)

SELECT @DATEVAR AS LastBusinessCurrentMonth

SET @DATEVAR = (SELECT 
    DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0))
    - CASE DATENAME(dw, DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0)))
         WHEN 'SUNDAY' THEN 2
         WHEN 'SATURDAY' THEN 1
         ELSE 0
      END AS LastBusinessCurrentMonth)

SELECT @DATEVAR AS LastBusinessCurrentMonth

【讨论】:

以上是关于如何从以下 SQL 查询中仅返回 yyyy-mm-dd [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MS SQL Server 中的标量 UDF 在查询中仅返回一个值

如何从所有文档中仅返回数组的嵌套文档

如何从所有文档中仅返回数组的嵌套文档

如何使用 REGEXP sql 从字符串中仅提取 5 位数字

如何从返回多个 OUT 值的过程中仅访问一个 OUT 值?

如何从 Hiveql 中的 select over 语句中仅提取最近一周?