【问题标题】:Want to check if entered starttime and endtime already exist in starttime and endtime column in oracle database in ASP.NET想检查输入的 starttime 和 endtime 是否已经存在于 ASP.NET 中 oracle 数据库的 starttime 和 endtime 列中
【发布时间】:2015-06-01 10:12:55
【问题描述】:

想检查在弹出窗口文本框中输入的开始时间和结束时间是否已经存在于 ASP.NET 中 oracle 数据库表的开始时间和结束时间列中

我正在进行日常活动管理,用户输入在特定日期完成的每项活动。

例如:如果用户输入开始时间 16:15 和结束时间 17:30,它应该检查数据库,并且如果同一用户已经在同一日期和时间输入了活动(开始时间 16:16 和结束时间 17:31)

它不应接受并显示错误/警报,例如“在给定时间已存在活动”

我希望此检查发生在弹出窗口的按钮单击并使用每个框的单击事件的相同弹出窗口形式..请参见下面的 URL

http://postimg.org/image/v6qrhb06h/

在 oracle 中将 starttime 和 endtime 声明为 varchar

我试过下面的查询

select * from activities 
 where starttime between +TextBox1.Text+ 
       and +TextBox2.Text+ 
 and endtime between +TextBox1.Text+ and +TextBox2.Text+

列和值 用户电子邮件活动名称 activitydescp 开始时间结束时间活动日期 xys xyz@abc.com XYZ 完成了等 09:45 11:00 04-MAY-15

不符合我的要求

【问题讨论】:

  • 当oracle支持日期数据类型时,是否有必要将日期数据类型保持为varchar?
  • @MGPJ 我只是从用户那里获得时间 [例如:16:15] 输入,并直接将该值从文本框存储到数据库
  • @MGPJ 请查看此图片网址postimg.org/image/50wpp1s9v

标签: c# asp.net oracle validation datetime


【解决方案1】:
 "select * from activities 
 where (to_date(starttime,'HH:MI') between 
 to_date('"+TextBox1.Text+ "','HH:MI') 
 and to_date('"+TextBox2.Text+ "','HH:MI') )
 OR (to_date(endtime,'HH:MI') between 
 to_date('"+TextBox1.Text+ "','HH:MI') 
 and to_date('"+TextBox2.Text+ "','HH:MI'))"

由于您将日期存储为 varchar,因此您需要使用 to_date() 函数进行转换:如果您以 24 小时格式保存时间,请使用 HH24

注意:还要始终使用可避免 sql 注入问题的参数化查询

create table time1
(starttime varchar(20),
 endtime varchar(20)
 );

 insert into time1 values ('16:30','17:45');
 insert into time1 values ('16:32','17:45');
 insert into time1 values ('17:45','18:00');

select * from time1
where to_date(starttime,'hh24:mi') 
between to_date('16:30','hh24:mi') 
and to_date('17:45','hh24:mi') 
and to_date(endtime,'hh24:mi') 
between to_date('16:30','hh24:mi') 
and to_date('17:45','hh24:mi');

STARTTIME   ENDTIME
16:30       17:45
16:32        17:45

【讨论】:

  • @kumartyr 查看我编辑的答案。如果您以 24 小时格式保存时间,您可以使用 HH24 而不是 HH
  • @kumartyr 对于第二个活动,你给出的结束时间是多少?
  • 第二个活动给了 18:00
  • @kumartyr 但是会在 16:31 到 17:45 之间检查时间..si ithink 问题与结束时间给出的时间
【解决方案2】:

我不是 oracle 专家,但在您之间使用时,理想情况下应该将字段作为日期时间而不是 VARCHAR。

然后,一旦你这样做了,你就可以编写一个简单的查询:

"select * from activities 
 where (starttime between '" + TextBox1.Text + "' and '" + TextBox2.Text + "')"
 OR (endtime between '" + TextBox1.Text + "' and '" + TextBox2.Text + "')";

我更改了添加 OR 而不是 AND,因为我看到您对重叠感兴趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2019-08-25
    • 2018-11-02
    • 1970-01-01
    相关资源
    最近更新 更多