我有两个不同的列作为DateTime类型:CREATION_DATE和UPDATE_DATE
我想创建一个SELECT(某些字段)语句,该列由(UPDATE_DATE
或CREATION_DATE
而不是两者)排序,其中UPDATE_DATE > CREATION_DATE
和UPDATE_DATE
必须为{{ 1}}
为什么?任何项目都将在数据库中创建,NOT NULL
将自动填充,但不会填充CREATION_DATE
列。
当有人修改现有项目时,UPDATE_DATE
将在每次修改时填写/更新,并将在UPDATE_DATE(ascendent)的UserInterface上列出。
怎么做?
对不起,如果我的问题不好......
答案 0 :(得分:3)
这样的事情:
DECLARE @tbl TABLE(UPDATE_DATE DATETIME,CREATION_DATE DATETIME)
INSERT INTO @tbl
SELECT '2011-01-01','2011-02-01'
UNION ALL
SELECT '2012-01-01','2011-12-10'
SELECT
*
FROM
@tbl AS tbl
ORDER BY
(
CASE WHEN tbl.UPDATE_DATE>tbl.CREATION_DATE
THEN tbl.UPDATE_DATE
ELSE tbl.CREATION_DATE
END) ASC
答案 1 :(得分:1)
select
*
from
(
SELECT
your_columns,
ISNULL(UPDATE_DATE, CREATION_DATE) as sort_date
FROM
....
)
order by
sort_date
这会将UPDATE_DATE
列选为sort_date
。但是,由于ISNULL
功能,如果CREATION_DATE
为UPDATE_DATE
,则会使用NULL
列。
答案 2 :(得分:1)
使用isnull
,如果UPDATE_DATE
为空,则使用CREATION_DATE
订购行。
select *
from table
order by isnull(UPDATE_DATE, CREATION_DATE) asc
详细了解isnull
on MSDN。
coalesce
是另一种选择,它可以在大多数RDBMS(afaik)中运行。
select *
from table
order by coalesce(UPDATE_DATE, CREATION_DATE) asc
答案 3 :(得分:0)
另一种选择是添加一个CASE列并按顺序排序。我更喜欢这个解决方案,因为它不使用子查询
select
CASE
WHEN UPDATE_DATE > CREATION_DATE THEN UPDATE_DATE
else CREATION_DATE
END as MyOrderDate
, *
from fund_datasource_feed
order by MyOrderDate