我的微信交不了电费费的原因

在mysql数据库里,用mysql标准库函数如何根据给定的两个日期生成它们之间所有以天位单位的日期列表,比如给定两个日期,然后生成如下一列值:datecols只能用mysql标准函数不能自定义函数,这个sql如何写?
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
想了好久总于写出不依赖其他表,以及不写proc或function 的解决方法了,具体如下:
-- 定义自增变量set @i = -1;-- 创建指定日期间记录数天数需要 加 1set @sql = repeat(" select 1 union all",-datediff('','')+1);-- 将最后一个union all 去掉,这里前边加1个空格,就不用在减1了set @sql = left(@sql,length(@sql)-length(" union all"));-- 拼接sqlset @sql = concat("select date_add('',interval @i:=@i+1 day) as date from (",@sql,") as tmp");prepare stmt from @
另附测试截图:
CREATE TABLE num (i int);INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);select adddate('', numlist.id) as `date` from (SELECT n1.i + n10.i*10 + n100.i*100 AS id FROM num n1 cross join num as n10 cross join num as n100) as numlist where adddate('', numlist.id) &= '';//OUTPUT+------------+| date
|+------------+|
|+------------+
CREATE TEMPORARY TABLE `tmpdate` (date varchar(20));DELIMITER $$DROP PROCEDURE IF EXISTS zj$$CREATE PROCEDURE zj(i DATE,j DATE)BEGINWHILE i&=j DOINSERT INTO `tmpdate` VALUES(i);SET i=i+INTERVAL 1 DAY;END WHILE;END$$DELIMITER ;call zj('','');select * from `tmpdate`;
我刚测试了一下,下面这样也可以:
CREATE TABLE num (i int);INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);SET @n = -1;SELECT num.*,DATE_ADD( '', interval @n := @n+1 day) AS datecolsFROM numHAVING DATE_ADD('', interval @n day) &= '';
写了一个存储过程,你跑一下,应该可以满足你的要求。
DELIMITER $$DROP PROCEDURE IF EXISTS DayRangeProc$$CREATE PROCEDURE DayRangeProc(IN start_date datetime , IN end_date datetime )
DECLARE temp
DECLARE range_day
SET temp = 0;
SET range_day = (SELECT DATEDIFF(end_date,start_date));
WHILE temp
&= range_day DO
select ADDDATE(start_date, temp);
SET temp = temp + 1;
END WHILE;
DELIMITER ;Call DayRangeProc('','');
不需要搞个临时表这么麻烦1.在你系统里随表找一个足够多数据的表(行数能超过你的时间跨度就可以),假设为:pt_analyticslog_2012292.sql :
SET @days =
TIMESTAMPDIFF(DAY,'','');SET @d = -1;SELECT @d :=@d+1,ADDDATE('',@d)FROM pt_analyticslog_201229WHERE @d&@days
不是您所需,查看更多相关问题与答案
德问是一个专业的编程问答社区,请
后再提交答案
关注该问题的人
共被浏览 (16625) 次MYSQL设计表时,需要 两个TIMESTAMP 字段的情况 -
- ITeye技术网站
博客分类:
有时候,数据库表有这样的需求,要一个记录创建时间,一个记录修改时间。
理想中的设计是这样的,更新时间的初始值和创建时间一样:
CREATE TABLE `test_table` (
`id` INT( 10 ) NOT NULL,
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = INNODB;
或者是这样的,更新时间初始值为空,只有在更新的时候才有值:
CREATE TABLE `test_table` (
`id` INT( 10 ) NOT NULL,
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = INNODB;
这样的建表SQL,是执行不了的,执行时报错,估计这个很多人遇到过吧:
Incorr there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
网上找到个解决方法(只适用于更新时间的初始值和创建时间一样,当然这个也说得过去):
CREATE TABLE `test_table` (
`id` INT( 10 ) NOT NULL,
`create_time` TIMESTAMP NOT NULL DEFAULT 0,
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = INNODB;
INSERT语句这样写:
INSERT INTO test_table (id, create_time, update_time) VALUES (1, NULL, NULL);
或者这样写(注意,没有写create_time):
INSERT INTO test_table (id, update_time) VALUES (1, NULL);
UPDATE语句正常写法(假设test_table.id可以修改):
UPDATE test_table (id) VALUES (2);
补充说明:
上面的问题,应该是在5.7早期版本是这样,目前我用5.7.17版本,两个timestamp是可以的,写法是:
CREATE TABLE `test_table` (
`id` INT( 10 ) NOT NULL,
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE = INNODB;
浏览: 176728 次
来自: 深圳
如果你maven项目分了模块,比如分了一个 projec-da ...
yangcheng33 写道赞,有个地方要纠正下 &in ...
赞,有个地方要纠正下 &includes&
非常棒,因为从来没写过日志,要几小时上手,官网将的一塌糊涂。这 ...MySql查询时间段的方法
投稿:shichen2014
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了MySql查询时间段的方法,包括了传统的针对时间字段的查询方法与UNIX时间戳的查询技巧,非常具有实用价值,需要的朋友可以参考下
本文实例讲述了MySql查询时间段的方法。分享给大家供大家参考。具体方法如下:
MySql查询时间段的方法未必人人都会,下面为您介绍两种MySql查询时间段的方法,供大家参考。
MySql的时间字段有date、time、datetime、timestamp等,往往我们在存储数据的时候将整个时间存在一个字段中,采用datetime类型;也可能采用将日期和时间分离,即一个字段存储date,一个字段存储时间time。无论怎么存储,在实际应用中,很可能会出现包含“时间段”类型的查询,比如一个访问记录数据库,需要统计每天的访问数量,这个每天就是一个时间段。下面介绍MySql查询时间段的两种常见方法,其他数据库也可以类似实现。
方法一:传统方式,即指定开始时间和结束时间,用"between”或者"&","&"来建立条件,比如查询日到日的数据条数,则可以使用
代码如下:select count(*) from sometable where datetimecolumn&=' 00:00:00' and datetimecolumn&' 00:00:00'
但是,这种方法由于时间不是整数型数据,所以在比较的时候效率较低,所以如果数据量较大,可以将时间转换为整数型的UNIX时间戳,这就是方法二。
方法二:UNIX时间戳,每个时间对应了一个唯一的UNIX时间戳,该时间戳是从' 00:00:00' 为0开始计时,每秒增加1。MySql内置了传统时间和UNIX时间的互换函数,分别为:
UNIX_TIMESTAMP(datetime)
FROM_UNIXTIME(unixtime)
比如运行 代码如下:SELECT UNIX_TIMESTAMP(' 00:00:00')
运行 代码如下:SELECT FROM_UNIXTIME()
返回' 00:00:00'
于是,我们可以将时间字段里的数据替换为整型的UNIX时间,这样,比较时间就成为整数比较了,建立索引后能大大提高效率。在查询的时候,需要把起点时间和结尾时间分别转换为UNIX时间再进行比较,如:
代码如下:select count(*) from sometable where datetimecolumn&=UNIX_TIMESTAMP(' 00:00:00') and datetimecolumn&UNIX_TIMESTAMP(' 00:00:00')
也可以在调用程序中先转换为UNIX时间再传入MySql,总之这种方式有利于快速查询时间段,不过显示时间则需要再反转一次。
希望本文所述对大家的MySQL数据库程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具mysql中时间日期 datetime字段出现-mysql教程-ab蓝学网
mysql中时间日期 datetime字段出现
简介:数据库|关于mysql中时间日期datetime字段出现的问题,可以按以下方面解决如果大家注意一下datetime日期格式类型的话就应该可以不要问了,datetime日期必须是2012-0...
关于mysql中时间日期 datetime字段出现的问题,可以按以下方面解决
如果大家注意一下datetime日期格式类型的话就应该可以不要问了,datetime日期必须是
10:10:10 这种,否则就有可能出来
正确的php sql语句写法应该是:&
$sql = &insert into table(datetime) values('&.date(&Y-m-d h:i:s&,time()).&')&; //datetime字段的类型为“datetime”,
注意后面要插入的数据是字符串要加“单引号”。
这样就没错了,时间日期类型插入数据库之前要格式化,否则就出现插入的全是的问题。
个人建义,大家保存时间时最好使用int类型保存time()生成的日期这样操作会更方便。
上一编:下一编:
喜欢猜你喜欢的内容
大家感兴趣的内容
1 2 3 4 5 6 7 8 9 10
最近更新的内容
1 2 3 4 5 6 7 8 9 10
本月热门的内容
1 2 3 4 5 6 7 8 9 10

我要回帖

更多关于 微信交电费失败没退款 的文章

 

随机推荐