添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • 查询当天的所有数据
SELECT * FROM 表名 WHERE DATEDIFF(字段,NOW()) = 0
SELECT * FROM 表名 WHERE to_days(时间字段名) = to_days(now());
  • 查询昨天的所有数据
SELECT * FROM 表名 WHERE DATEDIFF(字段,NOW())=-1
SELECT * FROM 表名 WHERE TO_DAYS(NOW()) - TO_DAYS(时间字段名) = 1
  • 查询未来第n天的所有数据
//当n为负数时,表示过去第n天的数据
SELECT * FROM 表名WHERE DATEDIFF(字段,NOW())=n
  • 查询未来n天内所有数据
//n天内
SELECT * FROM 表名 WHERE DATEDIFF(字段,NOW())<n AND DATEDIFF(字段,NOW())>=0
  • 查询出今天,年月日
SELECT DATE_SUB(CURDATE(), INTERVAL 0 DAY)
  • 几个小时内的数据
DATE_SUB(NOW(), INTERVAL 5 HOUR)
SELECT * FROM 表名 wher DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名)
SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )
SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) =1
  • 查询过去n天内所有数据
//包含当天
SELECT * FROM 表名 WHERE DATEDIFF(字段,NOW())<=0 AND DATEDIFF(字段,NOW())>-n
//不包含当天
SELECT * FROM 表名 WHERE DATEDIFF(字段,NOW())<0 AND DATEDIFF(字段,NOW())>-n

DATEDIFF函数说明:

DATEDIFF() 函数用于返回两个日期之间的天数。 语法:DATEDIFF(date1,date2) date1 和 date2
参数是合法的日期或日期/时间表达式。 注释:
1. 只有值的日期部分参与计算。
2. 当日期date1<date2时函数返回值为正数,date1=date2时函数返回值为0,date1>date2 时函数返回值为负数。
3. Mysql的DATEDIFF只有两个参数。SQL Server有三个参数,详细内容可见:
SQL Date函数

SQL语句如下:查询当天的所有数据SELECT * FROM 表名 WHERE DATEDIFF(字段,NOW()) = 0SELECT * FROM 表名 WHERE to_days(时间字段名) = to_days(now());1查询昨天的所有数据SELECT * FROM 表名 WHERE DATEDIFF(字段,NOW())=-1SELECT * FROM select * from 表名 where to_days(时间字段名) = to_days(now());   SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) SELECT * FROM 表名 where DA SELECT date_add( date_sub( ( SELECT DATE_SUB( curdate( ), INTERVAL 6 DAY ) ), INTERVAL 1 DAY ), INTERVAL ( cast( help_topic_id AS signed ) + 1 ) DAY ) dayStr mysql.help_topic WHERE help_topic_id < DATEDIFF( NOW( ), date_sub( (
一、使用Between AND select * from 表名 where 字段名 Between '2019-1-01 00:00:00' AND '2019-7-12 23:59:59' 二、使用>,< select * from 表名 where 字段名 > '2019-1-01 00:00:00' and 字段名 < '2019-12-12 23:59:59' 三、升降序 select * from 表名 where 字段名 between '2020-10-23' a
做课设的时候找了很多资料,看了很多Mysql查询上个月数据的代码,不过在sqlite3似乎并不能成功。我找到了一种用datatime筛选查询的方法,供跟我同样用sqlite3的伙伴参考。 select * from s where time between datetime('now','-1 month','start of month') and datetime('now','start of month'); 例如现在是12月份,我查询我表格里上一个月,即11月的信息: 同样查找某一时
今天的所有数据:select * from 表名 where DateDiff(day,datetime字段,getdate())=0 昨天的所有数据:select * from 表名 where DateDiff(day,datetime字段,getdate())=1 7内的所有数据:select * from 表名 where DateDiff(day,datetime字段,getdate())<=7 30天内的所有数据:select * from 表名 where DateDiff
select @m=month(@date) select @m=case when @m between 1 and 3 then 1 when @m between 4 and 6 then 4 when @m between 7 and 9 then 7 else 10 end select @time=datename(year,@date)+'-'+convert(varchar(10),@m)+'-01' return datediff(day,@time,dateadd(mm,3,@time)) --按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串存在多少个分隔符号,然后再加一,就是要的结果。 Create function Get_StrArrayLength @str varchar(1024), --要分割的字符串 @split varchar(10) --分隔符号 returns int begin declare @location int declare @start int declare @length int set @str=ltrim(rtrim(@str)) set @location=charindex(@split,@str) set @length=1 while @location<>0 begin set @start=@location+1 set @location=charindex(@split,@str,@start) set @length=@length+1 return @length --按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便 Create function Get_StrArrayStrOfIndex @str varchar(1024), --要分割的字符串 @split varchar(10), --分隔符号 @index int --取第几个元素 returns varchar(1024) begin declare @location int declare @start int declare @next int declare @seed int set @str=ltrim(rtrim(@str)) set @start=1 set @next=1 set @seed=len(@split) set @location=charindex(@split,@str) while @location<>0 and @index>@next begin set @start=@location+@seed set @location=charindex(@split,@str,@start) set @next=@next+1 if @location =0 select @location =len(@str)+1 --这儿存在两种情况:1、字符串不存在分隔符号 2、字符串存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。 return substring(@str,@start,@location-@start) select dbo.Get_StrArrayStrOfIndex('8,9,4','',4) --结合上边两个函数,象数组一样遍历字符串的元素 create function f_splitstr(@SourceSql varchar(8000),@StrSeprate varchar(100)) returns @temp table(F1 varchar(100)) begin declare @ch as varchar(100) set @SourceSql=@SourceSql+@StrSeprate while(@SourceSql<>'') begin set @ch=left(@SourceSql,charindex(',',@SourceSql,1)-1) insert @temp values(@ch) set @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'') return select * from dbo.f_splitstr('1,2,3,4',',') --全角和半角转换函数 Create FUNCTION f_Convert( @str NVARCHAR(4000), --要转换的字符串 @flag bit --转换标志,0转换成半角,1转换成全角 )RETURNS nvarchar(4000) BEGIN DECLARE @pat nvarchar(8),@step int,@i int,@spc int IF @flag=0 Select @pat=N'%[!-~]%',@step=-65248, @str=REPLACE(@str,N' ',N' ') Select @pat=N'%[!-~]%',@step=65248, @str=REPLACE(@str,N' ',N' ') SET @i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str) WHILE @i>0 Select @str=REPLACE(@str, SUBSTRING(@str,@i,1), NCHAR(UNICODE(SUBSTRING(@str,@i,1))+@step)) ,@i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str) RETURN(@str) declare @s1 varchar(8000) select @s1='  2-3456a78STUVabn国opwxyz' select dbo.f_convert(@s1,0),dbo.f_convert(@s1,1) 函数返回值是表 create table test(id int primary key,name char(10)) insert into test values(1,'test1') insert into test values(2,'test2') insert into test values(3,'test3') insert into test values(4,'test4') 1、标量函数 create function return_count() returns int begin declare @count int select @count=count(*) from test return @count select dbo.return_count() cont --count为显示的列头 --运行结果 --count sql删除重复的记录 打开测试数据库test,并以表w01为例,将下面的SQL语句放入sql2000查询分析器,一段一段执行即可看到效果 ---在sql2000下创建测试数据表 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[w01]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[w01] ---在sql2005下创建测试数据表,如果是sql2005则用本段来判断数据表是否存在 ---if exists(select 1 from sys.tables where name='w01') ---drop table w01 ----开始创建测试数据库 create table w01(gs903 varchar(32),gs1002 varchar(32)) insert into w01 select '1','a' union all select '1','a' union all select '1','a' union all select '2','a' union all select '2','e' union all select '3','b' union all select '3','d' select * from w01 ---为表w01添加一个可以表示唯一标示的自增字段ID alter table w01 add [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ---查询删除前的数据和记录数:7 select * from w01 select count(*) from w01 ---查询具有重复记录的所有记录;3 select gs903,gs1002,count(*) as count from w01 group by gs903,gs1002 having count(*)>1 order by count desc ---删除重复的数据:2行 delete from w01 where id not in (select max(id) from w01 group by gs903,gs1002) ---看看删除后还有没有重复记录:0 select gs903,gs1002,count(*) as count from w01 group by gs903,gs1002 having count(*)>1 order by count desc ---删除后的数据和记录数:7-2=5 select * from w01 select count(*) from w01 用SQL语句添加删除修改字段 alter table docdsp add dspcode char(200) Alter TABLE table_NAME Drop COLUMN column_NAME 修改字段类型 Alter TABLE table_name Alter COLUMN column_name new_data_type sp_rename 更改当前数据用户创建对象(如表、列或用户定义数据类型)的名称。 sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ] --假设要处理的表名为: tb --判断要添加列的表是否有主键 if exists(select 1 from sysobjects where parent_obj=object_id('tb') and xtype='PK') begin print '表已经有主键,列只能做为普通列添加' --添加int类型的列,默认值为0 alter table tb add 列名 int default 0 begin print '表无主键,添加主键列' --添加int类型的列,默认值为0 alter table tb add 列名 int primary key default 0
今天的所有数据:select * from表名where DateDiff(dd,datetime类型字段,getdate())=0 昨天的所有数据:select * from表名where DateDiff(dd,datetime类型字段,getdate())=1 7内的所有数据:select * from表名where DateDiff(dd,datetime类型字段,get...
问题描述查询数据库表最近7的记录select count(*),date(create_time) as date from task where datediff(now(),create_time)<=6 group by day(create_time); 但是发现某一没有数据,结果没有显示当(2017-08-28)的数据解决思路 思路一: 可以在自己的程序做额外的补零处理
         最近公司项目需要按时间段对数据库进行一些删除操作,应为自己之前没有涉及所以上网查询了一下。现在闲下来整理一下虽然下面的例子只有查询操作,但是删除和修改也是可以的(可以举一反三),这里主要的是where后面的函数。 建表语句如下: CREATE TABLE `order` (
这是一个编程类的问题,我可以回答。以下是计算30天数据SQL语句: SELECT DATE(date_column), COUNT(*) FROM table_name WHERE date_column >= DATE_SUB(NOW(), INTERVAL 30 DAY) GROUP BY DATE(date_column); 其,date_column是包含日期的列名,table_name是表名。这条SQL语句会返回30天数据量。