SQL获取在7天后过期的记录

时间:2017-08-22 13:50:08

标签: sql sql-server

我希望有人可以指出我做错了什么,因为我不知道。这是我第一次使用DATEADD。我尝试将+ 7,+ 8放在以防万一,但没有。我不知道我做错了什么。我只需要7天的记录,而不是那些天之间的记录。

SELECT  A.ID
       ,B.EMAIL
       ,A.NUMBER 
       ,A.EXPIRATION

  FROM vw_RECORD AS A
  LEFT JOIN vw_INFO AS B ON A.ID=B.ID
  WHERE NUMBER LIKE 'C%'
  AND A.EXPIRATION = DATEADD(DAY,7,GETDATE()) 

没有最后一个AND语句的结果让我:

ID          EMAIL           NUMBER         EXPIRATION
530c    email@gmail.com     C-0001    2017-08-29 00:00:00.000

先谢谢你。

3 个答案:

答案 0 :(得分:3)

在SQL Server中,GETDATE()(尽管名称有)具有时间组件。所以,你需要删除它:

A.EXPIRATION = CONVERT(DATE, DATEADD(DAY, 7, GETDATE()))

答案 1 :(得分:0)

我的猜测是DATEADD不能接受DAY作为第一个参数,因为它使用缩写(例如mm表示月份),所以代码看起来像这样:

SELECT  A.ID
       ,B.EMAIL
       ,A.NUMBER 
       ,A.EXPIRATION

  FROM vw_RECORD AS A
  LEFT JOIN vw_INFO AS B ON A.ID=B.ID
  WHERE NUMBER LIKE 'C%'
  AND A.EXPIRATION = DATEADD(dd,7,GETDATE())

同样,getdate会在最后添加时间,而我猜测到期也有时间部分,因为您可能只是在当前日期添加了7天,但它永远不会完全相同。您可以尝试在没有时间部分的情况下转换它们:

SELECT  A.ID
       ,B.EMAIL
       ,A.NUMBER 
       ,A.EXPIRATION

  FROM vw_RECORD AS A
  LEFT JOIN vw_INFO AS B ON A.ID=B.ID
  WHERE NUMBER LIKE 'C%'
  AND CONVERT(date, A.EXPIRATION) = CONVERT(date, DATEADD(dd,7,GETDATE()))

答案 2 :(得分:0)

试试这个:

leaflet() %>% addTiles() %>%
   setView(lng = 12, lat = 50, zoom = 4) %>%
   # Register leaflet-side-by-side plugin on this map instance
   registerPlugin(LeafletSideBySidePlugin) %>%
   onRender("
        function(el, x) {
          var mylayer1 = L.tileLayer(
            'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{
             maxZoom: 18
             }).addTo(this);
          var mylayer2 = L.tileLayer(
             '//stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png',{
             maxZoom: 14
             }).addTo(this);
        L.control.sideBySide(mylayer1, mylayer2).addTo(this);
        ")