我在SQL Server 2012中有这样的表:
DECLARE @test TABLE (dateField datetime,
col1 varchar(10),
col2 varchar(10)
)
insert into @test
select dateadd(day,-1,getdate()), 'Test A', 'Other A'
union
select dateadd(day,-1,getdate()), 'Test E', 'Other E'
union
select getdate(), 'Test B', 'Other B'
union
select dateadd(day,1,getdate()), 'Test C', 'Other C'
union
select dateadd(day,1,getdate()), 'Test A', 'Other C'
union
select dateadd(day,1,getdate()), 'Test D', 'Other B'
我想按特定顺序检索数据。
订单应该是:
dateField ASC
Col1 ends with A
Col2 ends with B
任何帮助将不胜感激。我尝试在SQL中做case语句。它没有按照我的预期发挥作用。
答案 0 :(得分:0)
你似乎有点困惑,如果它被过滤或排序或其组合。这样做。
select
*
from (
SELECT
*
,substring(col1,len(col1),1) [LastCharCol1]
,substring(col2,len(col2),2) [LastCharCol2]
FROM @test
) t
where 1=1
AND (
[LastCharCol1]='A'
OR [LastCharCol2]='B'
)
order by CASE WHEN dateField>CONVERT(DATE,GETDATE()) THEN 1 ELSE 0 END DESC,CASE WHEN [LastCharCol1]='A' THEN 1 ELSE 0 END DESC,CASE WHEN [LastCharCol2]='B' THEN 1 ELSE 0 END DESC
答案 1 :(得分:0)
如果我理解正确,你想过滤记录:
select *
from @test
where dateField > getdate() and (col1 like '%A' or col2 like '%B')