php 查询日期 sql语句怎么写,php – 循环带有日期的SQL插入语句

我需要运行一个语句,每次超出日期时,将使用相同的信息填充数据库.

我目前正在尝试这些方面的东西,没有任何运气.

DECLARE

i_int BINARY_INTEGER := 1;

BEGIN

WHILE i_int <= 30 LOOP

INSERT INTO bs_events (eventDate,eventTime,title,spaces,description,entryFee,payment_required,max_qty,allow_multiple) VALUES ('2011-03-i_int 00:00:00', '10:00','Carpet Cleaner 3000','4','This is rad','25.99','1','1','2');

i_int := i_int + 1;

END LOOP;

END;

/

我似乎无法让它工作,我陷入了代码洞,不能直接思考.

我基本上希望日期从01到30增加一个然后我将手动更改月份并在一年中的所有12个月再次运行脚本.

解决方法:

我在我使用的任何数据库中创建的第一个表是一个数字表,1到1000000.这样的表有很多用途,比如在SQL中实现循环.此外,它可用于生成我在我使用的任何数据库上创建的第二个表:Calendar表.

日历表对于每个日期都有一行,从数据库中的第一个记录的业务事件开始(加上一年左右).为所有相关业务查询保留足够的未来日期(加上几年安全).

您可以使用上述任一表解决您的具体问题,但日历表方法会更容易.

我将在MySQL下面给你一个简单但有效的例子:

create table digits(n int);

insert into digits values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);

create table numbers(

n int not null

,primary key(n)

);

数字表只是一个工作表,一旦创建了实数表,它就会被删除.数字表只有一列,它是主键.接下来,从1开始生成100万个连续的整数.(听起来很慢,但它实际上在我2岁的笔记本电脑上在10秒内完成).

insert

into numbers(n)

select 1

+ (d1.n * 1)

+ (d2.n * 10)

+ (d3.n * 100)

+ (d4.n * 1000)

+ (d5.n * 10000)

+ (d6.n * 100000) as n

from digits d1

,digits d2

,digits d3

,digits d4

,digits d5

,digits d6;

/* Drop the working table. */

drop table digits;

接下来,我将创建一个日历表.显然它目前没用,因为它没有任何有用的列.有用列的示例包括年,月名,周数,isFirstMonthDay,isLastMonthDay,财务年度,isHoliday,Holidayname,dayname,quarter,tertial.对于非标准时期,这是金色的.

create table calendar(

datum date not null

,primary key(datum)

);

好的,现在我们可以使用数字表作为行生成器来构建我们的日历表.假设我要生成2000-01-01和2019-12-31之间的所有日期.那将是7305天.简单,只需从数字表中选择多行,并将int列N添加到日期.这将创建一个日期增加的列表.

insert

into calendar(datum)

select date_add('1999-12-31', interval n day)

from numbers

where n <=7305;

完成.您可能只是通过使用数字表来了解如何解决问题?

最后,这是一个如何使用日历表解决您的特定问题的示例.如果添加Year和Month的列,当然会更容易.在这里,我将您的问题解释为“在每个月的每一天为一年中的其余时间生成一个相同的行”.

insert

into bs_events(

eventDate, eventTime, title

,spaces, description, entryFee

,payment_required, max_qty, allow_multiple

)

select datum, '10:00', 'Carpet Cleaner 3000'

,'4', 'This is rad', '25.99'

,'1', '1', '2'

from calendar

where datum >= date '2011-03-01'

and datum <= date '2011-12-31';

标签:php,sql,loops,database,insert

来源: https://codeday.me/bug/20190925/1816724.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值