求一个简单的时间比较问题

jenny0810 2010-01-16 04:21:09
大哥大姐阿姨叔叔们:
我现在有一个表aa,里面只有一个datetime类型的字段,我现在想判断此时间是否是本月

表结构如下:
mydate
20090212
20090215
20100101
20100108
20100113
我现在是这样写的

select mydate from aa where substring(convert(varchar(20),getdate(),120),0,8)=substring(convert(varchar(20),mydate,120),0,8)

现在是1月份结果数据:

mydate
20100101
20100108
20100113


想问一下,有没有简单的方法,来判断是本月,谢谢



还有一个问题:

declare @mm varchar(30)
select @mm=substring(convert(varchar(20),getdate(),120),0,8)
print(@mm)
exec(@mm)
为什么报'2010' 附近有语法错误呢??
...全文
92 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jenny0810 2010-01-16
  • 打赏
  • 举报
回复
谢谢各位了 解决了
jenny0810 2010-01-16
  • 打赏
  • 举报
回复
恩 好像有点明白了 刚又试了一下
liuhongyu_cjzm 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pt1314917 的回复:]
引用 7 楼 jenny0810 的回复:
引用 1 楼 pt1314917 的回复:
SQL code--本月数据:select*from aawheredatediff(mm,mydate,getdate())=0
DateDiff 函数不是
返回两个日期之间的时间间隔。


datediff,返回两个日期的差


datediff(单位,日期1,日期2)
获取日期2与日期1的差。单位为第一个参数。
yy为年
mm为月
dd为天
hh为时
mi为分
ss为秒
ms为毫秒
[/Quote]
liuhongyu_cjzm 2010-01-16
  • 打赏
  • 举报
回复
up
SQL77 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jenny0810 的回复:]
所以我想如果有一个日期是20091223
当前日期是20100101,这么写
select*from aawheredatediff(mm,mydate,getdate())=0
不是把20091223的也返回了吗???
我理解的对吗???
[/Quote]
是月,
SELECT DATEDIFF(MM,'20091223','20100101')

-----------
1

(所影响的行数为 1 行)


自己试试就知道

心中的彩虹 2010-01-16
  • 打赏
  • 举报
回复
datediff(m,getdate(),mydate)=0 求的是两个时间月份差距,为0则为本月,否则,反之
SQL77 2010-01-16
  • 打赏
  • 举报
回复

DATEPART
返回代表指定日期的指定日期部分的整数。

语法
DATEPART ( datepart , date )

参数
datepart

是指定应返回的日期部分的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。

日期部分 缩写
year yy, yyyy
quarter qq, q
month mm, m
dayofyear dy, y
day dd, d
week wk, ww
weekday dw
Hour hh
minute mi, n
second ss, s
millisecond ms
jenny0810 2010-01-16
  • 打赏
  • 举报
回复
所以我想如果有一个日期是20091223
当前日期是20100101,这么写
select*from aawheredatediff(mm,mydate,getdate())=0
不是把20091223的也返回了吗???
我理解的对吗???
SQL77 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jenny0810 的回复:]
引用 1 楼 pt1314917 的回复:
SQL code--本月数据:select*from aawheredatediff(mm,mydate,getdate())=0
DateDiff 函数不是
返回两个日期之间的时间间隔。

[/Quote]
DATEPART部分不同,可以返回年,月,日,...
pt1314917 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jenny0810 的回复:]
引用 1 楼 pt1314917 的回复:
SQL code--本月数据:select*from aawheredatediff(mm,mydate,getdate())=0
DateDiff 函数不是
返回两个日期之间的时间间隔。

[/Quote]
datediff,返回两个日期的差


datediff(单位,日期1,日期2)
获取日期2与日期1的差。单位为第一个参数。
yy为年
mm为月
dd为天
hh为时
mi为分
ss为秒
ms为毫秒
心中的彩虹 2010-01-16
  • 打赏
  • 举报
回复
select * from aa where datediff(m,getdate(),mydate)=0
SQL77 2010-01-16
  • 打赏
  • 举报
回复
declare @mm varchar(30) 
select @mm=substring(convert(varchar(20),getdate(),120),1,7)
print(@mm)
exec('SELECT '''+@mm+'''')

/*
2010-01

-------
2010-01
jenny0810 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pt1314917 的回复:]
SQL code--本月数据:select*from aawheredatediff(mm,mydate,getdate())=0
[/Quote]DateDiff 函数不是
返回两个日期之间的时间间隔。
SQL77 2010-01-16
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :SQL77(只为思齐老)
-- Date :2010-01-16 16:31:14
-- Version:
-- Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
-- Aug 6 2000 00:57:48
-- Copyright (c) 1988-2000 Microsoft Corporation
-- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:#A
if object_id('tempdb.dbo.#A') is not null drop table #A
go
create table #A([mydate] datetime)
insert #A
select '20090212' union all
select '20090215' union all
select '20100101' union all
select '20100108' union all
select '20100113'
--------------开始查询--------------------------

SELECT * FROM #A WHERE
CONVERT(CHAR(6),CONVERT(DATETIME,mydate),112)=
CONVERT(CHAR(6),GETDATE(),112)
----------------结果----------------------------
/*

(所影响的行数为 5 行)

mydate
------------------------------------------------------
2010-01-01 00:00:00.000
2010-01-08 00:00:00.000
2010-01-13 00:00:00.000

(所影响的行数为 3 行)


*/
SQL77 2010-01-16
  • 打赏
  • 举报
回复
SELECT * FROM TB WHERE CONVERT(CHAR(6),TIME,112)=CONVERT(CHAR(6),GETDATE(),112)
ggsysy 2010-01-16
  • 打赏
  • 举报
回复
datediff(m,mydate,getdate())=0
pt1314917 2010-01-16
  • 打赏
  • 举报
回复

declare @mm varchar(30)
select @mm=substring(convert(varchar(20),getdate(),120),0,8)
print(@mm)
exec(@mm)
--------------
你这里的@mm是个字符串。根本就不是合法的SQL语句。怎么能够使用exec动态执行呢?
@mm的值是2010-01
exec(@mm)的意思就好比直接去执行 2010-01
这个什么都不是,语法也谈不上符合。当然错了
xman_78tom 2010-01-16
  • 打赏
  • 举报
回复
datediff(month,mydate,getdate())=0
pt1314917 2010-01-16
  • 打赏
  • 举报
回复

--本月数据:
select * from aa where datediff(mm,mydate,getdate())=0

34,593

社区成员

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

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