在MySQL中,我有一个包含以下模式的表:
CREATE TABLE Orders(
`Order` int,
`Date` DATE,
`Amount` int);
如何获取所有记录,但是将一年以前的记录的日期显示为空白,否则显示一岁或一岁以下记录的日期?
答案 0 :(得分:1)
对于MSSQL:
SELECT CASE WHEN DATEDIFF(day,[Date],GETDATE()) > 365 THEN NULL ELSE [Date] END AS [Date] FROM yourTable
对于MySQL:
SELECT `Order`, (CASE WHEN DATEDIFF(CURDATE(),Date) > 365 THEN NULL ELSE Date END) AS Date, Amount FROM yourTable;
对于Oracle:
SELECT CASE WHEN SYSDATE - yourDateColum > 365 THEN NULL ELSE yourDateColumn END FROM yourTable
答案 1 :(得分:1)
MySQL的语法是:
select `order`,
(case when date >= date_add(now(), interval -365 day) as date
end),
amount
顺便说一下,给表或列保留字是不好的做法。 Order
是保留字。通常,使它复数或像OrderId
这样的东西可以解决问题。
答案 2 :(得分:0)
您希望在sql语句中使用dateadd()
和getdate()
。
像这样的东西
select Order, case when Date <= dateadd(yy, -1, getdate()) then null else Date end as [PastYearOnly], Amount from [OrderTable]
正如Arion所提到的......这是针对MS SQL的。如果你有一个不同的数据库系统,它可能会有点不同