簡體   English   中英

MSSQL查詢當日兩個日期范圍之間的所有記錄

[英]MSSQL query for all records between two date range of current day

我可能沒有問這個權利,但是基本上我需要一個查詢,該查詢在運行時返回從當月1日到15日輸入的所有記錄。 當15個通過時,僅返回從16號到當前月末的記錄。

我試圖構建這樣的東西,但是它是針對bigquery而不是sql的,而且我似乎找不到與mssql 2016類似的東西。

select sample_id
from dbo.table
WHERE date_entered BETWEEN DATE_ADD(CURRENT_DATE(), -15, 'DAY') AND CURRENT_DATE()
or
WHERE date_entered BETWEEN CAST(eomonth(GETDATE()) AS datetime) AND CURRENT_DATE()

不管今天是幾號,我都需要第一天到今天,直到十五日。 然后是16號,直到今天,直到月底。 抱歉,我是SQL新手。

更新:我能夠使用@GordonLinoff提供的示例解決此問題。 謝謝戈登!

SELECT rowguid, ModifiedDate 
FROM [AdventureWorks2017].[Person].[Person]
WHERE Year(ModifiedDate) =Year(getdate()) and month(ModifiedDate) =month(getdate()) and 
((day(getdate()) <= 15 and day(ModifiedDate) <=15))
Or
((day(getdate()) >= 16 and day(ModifiedDate) >=16))

對邏輯的描述有點難以理解,但是您似乎想要這樣的東西:

where date_entered >= datefromparts(year(getdate(), month(getdate(), 1)) and -- this month
      (day(getdate()) <= 15 or
       day(getdate()) > 15 and day(date_entered) > 15
      )

這是MySQL:

  SELECT *
  FROM dbo.table
  WHERE date BETWEEN  CASE WHEN DAY(CURRENT_DATE) <= 15 
                           THEN DATE_FORMAT(CURRENT_DATE, '%Y-%m-01')
                           ELSE DATE_FORMAT(CURRENT_DATE, '%Y-%m-16')
                      END 
                AND   CASE WHEN DAY(CURRENT_DATE) <= 15 
                           THEN DATE_FORMAT(CURRENT_DATE, '%Y-%m-15')
                           ELSE LAST_DAY(CURRENT_DATE)
                      END 

大查詢:

 SELECT *
 FROM table
 WHERE date BETWEEN  CASE WHEN EXTRACT(DAY FROM CURRENT_DATE) <= 15 
                          THEN DATE_TRUNC(CURRENT_DATE, MONTH)
                          ELSE DATE_ADD(DATE_TRUNC(CURRENT_DATE, MONTH), INTERVAL 15 DAY) 
                     END 
               AND   CASE WHEN EXTRACT(DAY FROM CURRENT_DATE) <= 15 
                          THEN DATE_ADD(DATE_TRUNC(CURRENT_DATE, MONTH), INTERVAL 14 DAY) 
                          ELSE DATE_ADD(CURRENT_DATE, INTERVAL 31 DAY) 
                     END 

這應該給

    date between 1 and 15
or  date between 16 and last_of_the_month

我試圖建立這樣的東西,但它對於bigquery

無論您使用哪種示例-BigQuery都不起作用!

以下是BigQuery標准SQL的工作示例,並使用一些“技巧”來避免使用冗余代碼片段

#standardSQL
SELECT sample_id
FROM `project.dataset.table`, 
UNNEST([STRUCT(
  EXTRACT(DAY FROM date_entered) AS day, 
  DATE_TRUNC(date_entered, MONTH) AS month
)])  
WHERE DATE_TRUNC(CURRENT_DATE(), MONTH) = month 
AND IF(
    EXTRACT(DAY FROM CURRENT_DATE()) < 16, 
    day BETWEEN 1 AND 15,
    day BETWEEN 16 AND 99
  )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM