如何查出表内15号以后的数据

limii 2014-06-04 11:39:12
我用到一个表order,字段和值如下:
orderID account amount orderTime
1 A 30 2014-05-13 22:26:36.000
2 B 27 2014-05-14 12:26:36.000
3 C 100 2014-05-15 02:26:36.000
4 D 40 2014-05-16 13:26:36.000

我想查出15号以后到今天的数据。比如今天是6月4号,我就查出5月15号到今天的数据。如果今天是6月24号,我就查出6月15号到24号的数据
这个语句怎么写?谢谢!
...全文
184 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiajiaren 2014-06-04
  • 打赏
  • 举报
回复
修改一下
IF OBJECT_ID('[order]') IS NOT NULL 
    DROP TABLE [order]
GO 
CREATE TABLE [order](orderID INT,account VARCHAR(1),amount INT,orderTime DATETIME)
INSERT [order]  SELECT 1,'A',30,'2014-05-13 22:26:36.000' UNION ALL  SELECT
2,'B',27,'2014-05-14 12:26:36.000' UNION ALL  SELECT
3,'C',100,'2014-05-15 02:26:36.000' UNION ALL  SELECT
4,'D',40,'2014-05-16 13:26:36.000'


---------------------------------------------------------查询------------------------------------------------------------------------------
DECLARE @NowDate AS DATETIME
SET @NowDate='2014-06-04  00:00:00'  --当前时间
SELECT * FROM [order] WHERE CONVERT(VARCHAR,orderTime,23)<CONVERT(VARCHAR,@NowDate,23)+' 23:59:59' AND orderTime>(CASE WHEN DAY(@NowDate)<15 THEN  CONVERT(VARCHAR(7),DATEADD(mm,-1,@NowDate),120)+'-15 '+'00:00:00' ELSE  CONVERT(VARCHAR(7),@NowDate,120)+'-15 '+'00:00:00' end)
---------------------------------------------------------结果------------------------------------------------------------------------------
/*

orderID     account amount      orderTime
----------- ------- ----------- -----------------------
3           C       100         2014-05-15 02:26:36.000
4           D       40          2014-05-16 13:26:36.000

(2 行受影响)
*/
jiajiaren 2014-06-04
  • 打赏
  • 举报
回复
IF OBJECT_ID('[order]') IS NOT NULL 
    DROP TABLE [order]
GO 
CREATE TABLE [order](orderID INT,account VARCHAR(1),amount INT,orderTime DATETIME)
INSERT [order]  SELECT 1,'A',30,'2014-05-13 22:26:36.000' UNION ALL  SELECT
2,'B',27,'2014-05-14 12:26:36.000' UNION ALL  SELECT
3,'C',100,'2014-05-15 02:26:36.000' UNION ALL  SELECT
4,'D',40,'2014-05-16 13:26:36.000'


---------------------------------------------------------查询------------------------------------------------------------------------------
DECLARE @NowDate AS DATETIME
SET @NowDate='2014-06-04 00:00:00'  --当前时间
SELECT * FROM [order] WHERE CONVERT(VARCHAR,orderTime,23)<CONVERT(VARCHAR,@NowDate,23)+' 23:59:59' AND orderTime>(CASE WHEN DAY(@NowDate)<15 THEN  CONVERT(VARCHAR(7),DATEADD(mm,-1,@NowDate),120)+'-15 '+CONVERT(VARCHAR,DATEADD(mm,-1,@NowDate),24) ELSE  CONVERT(VARCHAR(7),@NowDate,120)+'-15 '+'00:00:00' end)
---------------------------------------------------------结果------------------------------------------------------------------------------
/*

orderID     account amount      orderTime
----------- ------- ----------- -----------------------
3           C       100         2014-05-15 02:26:36.000
4           D       40          2014-05-16 13:26:36.000

(2 行受影响)
*/
七不语v 2014-06-04
  • 打赏
  • 举报
回复
select * from tablename t1
where date> (select case when DAY(GETDATE())<15 then CONVERT(varchar(7),DATEADD(m,-1,getdate()),120)+'-15' else CONVERT(varchar(7),getdate(),120)+'-15' end date) 
limii 2014-06-04
  • 打赏
  • 举报
回复
引用 7 楼 xxzxwsx 的回复:
[quote=引用 3 楼 limii 的回复:] [quote=引用 1 楼 xxzxwsx 的回复:]

select * from order where ordertime>='2014-5-15'
不妥吧?如果我是7月3号那天要查询呢?[/quote] 自然就查到2014-5-15到2014-7-3的数据了。反正是2014-5-15之后的都出来[/quote] 如果是7月3号查询,就只查6月15号到7月3号的数据。这是我想要的结果
在路上_- 2014-06-04
  • 打赏
  • 举报
回复
引用 3 楼 limii 的回复:
[quote=引用 1 楼 xxzxwsx 的回复:]

select * from order where ordertime>='2014-5-15'
不妥吧?如果我是7月3号那天要查询呢?[/quote] 自然就查到2014-5-15到2014-7-3的数据了。反正是2014-5-15之后的都出来
hjhj248392841 2014-06-04
  • 打赏
  • 举报
回复
思路是(getdate的日 > 15号 and orderTime between 6月15号 to getdate) or (getdate的日 < 15号 and orderTime between 5月15号 to getdate),里面做几个日期加减和截位,大致就是这样
在路上_- 2014-06-04
  • 打赏
  • 举报
回复
假如 ordertime 有可能超过今天,那就

select * from order where ordertime>='2014-5-15' and ordertime<cast((convert(char(10),DateAdd(day,1,GetDate()),120) as datetime)
limii 2014-06-04
  • 打赏
  • 举报
回复
引用 2 楼 xdashewan 的回复:
思路是(getdate的日 > 15号 and orderTime between 6月15号 to getdate) or (getdate的日 < 15号 and orderTime between 5月15号 to getdate),里面做几个日期加减和截位,大致就是这样
思路我能理解,就是不知道语句具体怎么表达,帮帮忙写来看看吧
limii 2014-06-04
  • 打赏
  • 举报
回复
引用 1 楼 xxzxwsx 的回复:

select * from order where ordertime>='2014-5-15'
不妥吧?如果我是7月3号那天要查询呢?
xdashewan 2014-06-04
  • 打赏
  • 举报
回复
思路是(getdate的日 > 15号 and orderTime between 6月15号 to getdate) or (getdate的日 < 15号 and orderTime between 5月15号 to getdate),里面做几个日期加减和截位,大致就是这样
在路上_- 2014-06-04
  • 打赏
  • 举报
回复

select * from order where ordertime>='2014-5-15'

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧