▲▲▲ 简单SQL语句,请问这个语句应如何写 ▲▲▲

lantianhf 2011-04-03 11:26:15

如何选取比当前月日 小于一天 的数据,注:不考虑年份,只要月日小于当前一天的就行

如:T1表
name riqi

111 2010-04-20
222 2010-03-25
333 2010-02-10
444 2010-04-02
555 2011-04-02

如今天是04月03日,则根据当前系统日期,选择的数据为:
name riqi
444 2010-04-02
555 2011-04-02

...全文
200 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongqishu 2011-04-04
  • 打赏
  • 举报
回复
select name, riqi from T1
where month(riqi)*100+day(riqi) < month(getdate())*100+day(getdate())
lantianhf 2011-04-03
  • 打赏
  • 举报
回复
可以了,数据类型建错了,对不起。
网瘾大叔 2011-04-03
  • 打赏
  • 举报
回复
一楼的基础上再加个if 排除不是当前年份的不就行了?
cento123 2011-04-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lantianhf 的回复:]
2楼的可以,可是当系统日期为01月01日时,就查询不出12月31日的数据了,正确的应该怎样写呢?
[/Quote]
不会吧,dateadd(dd,-1,getdate())应该能取到1231啊
AcHerat 元老 2011-04-03
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 ssp2009 的回复:]

引用 18 楼 dawugui 的回复:
引用 16 楼 happyflystone 的回复:
你有12-31的数据吗
我们那肯定是对的,写了才发现和你一样.
嘿嘿嘿,边斗地主边回帖.
一边dota一边回
[/Quote]

一边加班一边回!
快溜 2011-04-03
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 dawugui 的回复:]
引用 16 楼 happyflystone 的回复:
你有12-31的数据吗
我们那肯定是对的,写了才发现和你一样.
嘿嘿嘿,边斗地主边回帖.
[/Quote]一边dota一边回
dawugui 2011-04-03
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 happyflystone 的回复:]
你有12-31的数据吗
[/Quote]我们那肯定是对的,写了才发现和你一样.
嘿嘿嘿,边斗地主边回帖.
AcHerat 元老 2011-04-03
  • 打赏
  • 举报
回复

create table tb(name varchar(10),riqi datetime)
insert into tb
select '111' ,'2010-12-31' union all
select '222' ,'2010-03-31' union all
select '333' ,'2010-02-10' union all
select '444' ,'2011-03-31' union all
select '555' ,'2011-12-31'
go

select *
from tb
where substring(convert(varchar(8),riqi,112),5,4) = substring(convert(varchar(8),dateadd(dd,-1,cast('2012-1-1' as datetime)),112),5,4)

drop table tb


/*

name riqi
---------- -----------------------
111 2010-12-31 00:00:00.000
555 2011-12-31 00:00:00.000

(2 行受影响)
-狙击手- 2011-04-03
  • 打赏
  • 举报
回复
你有12-31的数据吗
lantianhf 2011-04-03
  • 打赏
  • 举报
回复
系统日期为 01月01日 还是不行
-狙击手- 2011-04-03
  • 打赏
  • 举报
回复


-- Test Data: ta
If object_id('ta') is not null
Drop table ta
Go
Create table ta(name int,riqi smalldatetime)
Go
Insert into ta
select 111,'2010-12-31' union all
select 222,'2010-03-25' union all
select 333,'2010-02-10' union all
select 444,'2010-04-02' union all
select 555,'2011-04-02'
Go
--Start


Select *
from ta
where right(convert( char(10),cast('2011-01-01' as datetime)-1,120) ,5) = right(convert( char(10),riqi,120) ,5)

--Result:
/*
name riqi
----------- ------------------------------------------------------
111 2010-12-31 00:00:00

(所影响的行数为 1 行)


*/
--End








----------------------论坛签名--------------------------

lantianhf:你好!
截至 2011-04-03 11:26:15 前:
你已发帖 237 个, 未结贴 14 个;结贴率为: 94.09%

当您的问题得到解答后请及时结贴:
进入>>>>>>



-狙击手- 2011-04-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lantianhf 的回复:]
4楼5楼的 也是这样,当系统日期为01月01日时就查不出 12月31日的数据了,怎么办呢
[/Quote]

不可能吧
AcHerat 元老 2011-04-03
  • 打赏
  • 举报
回复

create table tb(name varchar(10),riqi datetime)
insert into tb
select '111' ,'2010-04-20' union all
select '222' ,'2010-03-31' union all
select '333' ,'2010-02-10' union all
select '444' ,'2010-03-31' union all
select '555' ,'2011-04-02'
go

select *
from tb
where substring(convert(varchar(8),riqi,112),5,4) = substring(convert(varchar(8),dateadd(dd,-1,cast('2011-4-1' as datetime)),112),5,4)

drop table tb

/*

name riqi
---------- -----------------------
222 2010-03-31 00:00:00.000
444 2010-03-31 00:00:00.000

(2 行受影响)
快溜 2011-04-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lantianhf 的回复:]
4楼5楼的 也是这样,当系统日期为01月01日时就查不出 12月31日的数据了,怎么办呢
[/Quote]试试10楼
快溜 2011-04-03
  • 打赏
  • 举报
回复
select * from tb 
where month(riqi)=month(dateadd(dd,-1,getdate()))
and datepart(day,riqi)=datepart(dateadd(dd,-1,getdate()))
AcHerat 元老 2011-04-03
  • 打赏
  • 举报
回复

create table tb(name varchar(10),riqi datetime)
insert into tb
select '111' ,'2010-04-20' union all
select '222' ,'2010-03-25' union all
select '333' ,'2010-02-10' union all
select '444' ,'2010-04-02' union all
select '555' ,'2011-04-02'
go

select *
from tb
where substring(convert(varchar(8),riqi,112),5,4) = substring(convert(varchar(8),dateadd(dd,-1,getdate()),112),5,4)

drop table tb


/*

name riqi
---------- -----------------------
444 2010-04-02 00:00:00.000
555 2011-04-02 00:00:00.000

(2 行受影响)
lantianhf 2011-04-03
  • 打赏
  • 举报
回复
4楼5楼的 也是这样,当系统日期为01月01日时就查不出 12月31日的数据了,怎么办呢
AcHerat 元老 2011-04-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lantianhf 的回复:]

2楼的可以,可是当系统日期为01月01日时,就查询不出12月31日的数据了,正确的应该怎样写呢?
[/Quote]

1楼对的呀!???
lantianhf 2011-04-03
  • 打赏
  • 举报
回复
2楼的可以,可是当系统日期为01月01日时,就查询不出12月31日的数据了,正确的应该怎样写呢?
dawugui 2011-04-03
  • 打赏
  • 举报
回复
select * from tb where right(convert(varchar(10),riqi,120),5) = right(convert(varchar(10) , getdate() - 1 , 120),5)
加载更多回复(4)

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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