【发布时间】:2016-03-03 08:58:06
【问题描述】:
我试图在表中查找today's date 和given date 之间的日期差异。有些行有1 date,而其他行有2 dates(取更早的日期)。我尝试使用动态变量和临时表,但仍然无法正常工作
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
选择*进入结果 from ( select * from #result1 union select * from #result2 )
select *from result
第一个查询将给出结果
对于两个日期的情况,我也希望第二个查询的结果相同。
最后将两个结果合并到一个表格中
【问题讨论】:
-
您是否考虑过使用
date类型的列来存储日期? -
@sql_lover :无法理解您的要求,但以下查询可能会在一定程度上帮助您。对于日期的第一次出现
select substring (Availability,PATINDEX('% [0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]%', Availability),11) from test对于日期的最后一次出现select reverse(substring (reverse(Availability),0,11))from test
标签: sql sql-server sql-server-2012 datediff