2016-03-03 56 views
2

我在查找表中的today's dategiven date之間的日期差異。一些行有1 date,而其他行有2 dates(採取更早的日期)。我試着用動態的變量和臨時表,但仍然沒有工作日期區別查找器

input table

declare @t nvarchar(1000) 
    set @t = ' select a.Availability from [ScrappedData_Regina] a' 
    if(len(@t) < = 55 ) -- for single date case 
    begin 
    SELECT * INTO #result1 
    FROM 
    ( 
    select distinct [Product Name],[SKU],DATEDIFF(day,cast(right([Availability],10) as date),cast(GETDATE() as date)) as [Delivery Date] 
    from [ScrappedData_Regina]   
    where [Availability] like '%none%'  -- total 158 products 

    )    
    end  
else      -- for two date case 
    begin 
    SELECT * INTO #result2 
    FROM 
    ( 

     declare @t date 
     set @t = ' 
     select SUBSTRING(Availability, PATINDEX('% [0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]%', [Availability]), 11) as [Date Part] from [ScrappedData_Regina] ' 

    -- extracts date part from a column 

     select distinct [Product Name],[SKU],DATEDIFF(day,cast(@t as date),cast(GETDATE() as date)) as [Delivery Date] from ScrappedData_Regina 
    ) -- i want to pass the date part in this select statement 

選擇*到結果 從(SELECT * FROM#RESULT1工會SELECT * FROM#RESULT2)

select *from result 

第一個查詢會給出結果爲

firstquery result

而且我也希望第二個查詢的結果也是兩個日期的情況。

secondquery result

最後一個表中既包括結果

+0

您是否考慮過使用帶'date'類的列來存儲日期? –

+0

@sql_lover:無法理解您的要求,但下面的查詢可能會對您有所幫助。 (可用性,PATINDEX('%[0-9] [0-9] - [0-9] [0-9] - [0-9] [0-9] [0-9] [0-9]%',Availability),11)from test' 對於Date的最後一次出現'select reverse(substring(reverse(Availability),0,11))from test' – Arvind

回答

1
---------------------------------------------------------------------- 
-- Calculating Date Difference between today's date and given date -- 
----------------------------------------------------------------------- 

---- Total Products : 1505 ---- 


    IF OBJECT_ID('#RESULT') IS NOT NULL 
    DROP TABLE #RESULT 
    GO 



    SELECT *INTO #RESULT 
     FROM 
     (

    select distinct sku,category,subcategory,[Product Name],summary ,DATEDIFF(day,cast(right([Availability],10) as date),cast(GETDATE() as date)) as [Delivery Date] 
    from ScrappedData_Regina  
    where [Availability] like '%none%' AND DATEDIFF(day,cast(right([Availability],10) as date),cast(GETDATE() as date)) < 0 -- gives only delivery date that has to be delievered in future i.e in minus 
                                   -- total 74 Products 
    union 

    select distinct sku,category,subcategory,[Product Name],summary,'' as [Delivery Date] from ScrappedData_Regina where summary like '%in stock%' 

    union 

    select distinct sku,category,subcategory,[Product Name],summary,'' as [Delivery Date] from ScrappedData_Regina where summary like '%call for availability%' 

     ) a 

     select * from #RESULT 


select * into input_scrapregina 
from 
(

SELECT *, StockInformation = case 
         when (summary = 'in stock') then 'Any Stock' 
         when (summary = 'call for availability') then 'Call for Availability' 
         when (a.[Delivery Date] < -1 and a.[Delivery Date] >= -30) then 'Out of Stock expected within 30 days' 
         when (a.[Delivery Date] <= -30 and a.[Delivery Date] >= -60) then 'Out of Stock expected within 60 days' 
         when (a.[Delivery Date] <= 60 and a.[Delivery Date] >= -90) then 'Out of Stock expected within 90 days' 
         when (a.[Delivery Date] <= 60 and a.[Delivery Date] >= -90) then 'Out of Stock,not expected' 
         else 'Call for Availability' end from #RESULT a 
)c 


--------------------------------- 
--------- Final Result --------- 
--------------------------------- 

---- Total Products : 1505 ---- 

select *from input_scrapregina 
0

你也可以試試這個:

select substring(dbo.TableName.TableColumn, 15, charindex('/',dbo.TableName.TableColumn) - 1) FROM dbo.TableName 

然後

select getdate() - cast(substring(dbo.TableName.TableColumn, 15, charindex('/',dbo.TableName.TableColumn) - 1)as datetime) FROM dbo.TableName 

注:更改( 15)nu mber,以便它可以從您希望從其開始的索引開始