大哥大姐阿姨叔叔们:
我现在有一个表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' 附近有语法错误呢??
我现在有一个表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' 附近有语法错误呢??
解决方案 »
- SQL2005能不能实现 禁止远程用登录名通过 数据库管理器 来登录对数据库操作,但网站远程链接数据库不能受影响
- 求SQL
- SQL插入问题
- 通用数据库格式转换工具最新版,支持oracle,sqlsever,access等数据库之间数据格式转换
- 能否将企业管理器中->注册实例->右键->属性->安全性中->启动服务帐户->本地帐户 默认的修改掉啊100分的问题
- 查询为空返回什么
- 如何写这个汇总表的SQL语句?
- 简单sql问题
- 统计模块的数据库设计
- SQL SERVER7.0里如何知道锁定表的NT用户登录名
- 我要把一个数据库的数据导入到另一个数据库中去,两个库中表结构95%一样,表有80多个,一个一个插入太慢,我该怎么做
- SQLSERVER数据库中如何将一个表中的数据拷贝到另一个表中?
--本月数据:
select * from aa where datediff(mm,mydate,getdate())=0
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
这个什么都不是,语法也谈不上符合。当然错了
-- 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 行)
*/
返回两个日期之间的时间间隔。
select @mm=substring(convert(varchar(20),getdate(),120),1,7)
print(@mm)
exec('SELECT '''+@mm+'''')/*
2010-01
-------
2010-01
datediff(单位,日期1,日期2)
获取日期2与日期1的差。单位为第一个参数。
yy为年
mm为月
dd为天
hh为时
mi为分
ss为秒
ms为毫秒
晕
当前日期是20100101,这么写
select*from aawheredatediff(mm,mydate,getdate())=0
不是把20091223的也返回了吗???
我理解的对吗???
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
SELECT DATEDIFF(MM,'20091223','20100101')
-----------
1(所影响的行数为 1 行)自己试试就知道