我的这句SQL语句那里错了?请各位指教!

yasaka 2002-01-08 10:32:28
我是菜鸟一个,近日给公司做数据库程序,两层的,前端程序用的是PowerBuilder7,后台数据库用的是Orale8.05,我遇到麻烦了:
t_zs_kqls(考勤流水正式表)是一张表,qdsj(签到时间)是该表的一个字段,类型是DateTime类型(即日期时间类型).sm_Begin和sm_End是前台Powerbuilder程序中的渐增单行编辑框控件,里面显示的也是DateTime类型的数据.现在我想将表t_zs_kqls中字段qdsj在某一日期时间阶段的记录删除,用SQL语句写,我是这么写的:

DateTime ldt_bt , ldt_et

...................

ldt_bt = DateTime(Trim(sm_Begin.text))
ldt_et = DateTime(Trim(sm_End.text))

...................

delete from t_zs_kqls where qdsj between :ldt_bt and :ldt_et
...................

其中日期时间满足 ldt_bt < ldt_et 但是在运行时候发现问题,不能正常删除表中满足条件的记录.(编译通过,但是运行和预期的不一样).我分析是
delete from t_zs_kqls where qdsj between :ldt_bt and :ldt_et
这句SQL语句的 where条件写错了,后来我把它换成了
delete from t_zs_kqls where qdsj >= :ldt_bt and qdsj <= :ldt_et
运行时一样出错,不能删除满足条件的记录.
到底应该怎么写,我不知道,我那主管也不知道,如果实在不行,我只有调用数据窗口相应的一系列方法了,应该能够解决,但是编程起来挺麻烦的.
各位大虾,这个SQL语句到底应该怎么写,请知道的网友赐教,十分感谢!!!
...全文
109 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobby_h 2002-01-09
  • 打赏
  • 举报
回复
好,谢了。
咖啡 2002-01-09
  • 打赏
  • 举报
回复
datetime函数一共有两种用法:
1、datetime(date,(time))
2、datetime(blob)

你的sql语句没有错,是你的函数用错了。
daluobo 2002-01-09
  • 打赏
  • 举报
回复
收藏~~~
ylg007 2002-01-09
  • 打赏
  • 举报
回复
save as 了
liulee 2002-01-08
  • 打赏
  • 举报
回复
PB中由于对各种RDBMS的支持,因此,在sql语法中日期,时间的处理不进相同,以下是一些常用的处理方法:

两个时间段内的数据检索问题一直很麻烦。以下是我整理的方法。

一、数据窗解决:

定义两个datetime型参数,at_from,at_end,(开始,结束)
where 条件写成:
where col_date >= :at_from and col_date < :at_end
如,1997-12-12 到 2000-01-02
则检索时就这样处理:
datetime lt_from,lt_end
lt_from = datetime(date('1997-12-12),time('00:00:00'))
lt_end = datetime(date('2000-01-03',time('00:00:00')) //注意!加了一天
dw_xxx.retrieve(lt_from,lt_end)
这样检索出来的数据就是绝对符合条件的。

二、如果是数据窗过滤,就非常简单了:

ls_filter = &
' string(col_date,"yyyy-mm-dd") >="'+string(date1,'yyyy-mm-dd')+'" and string(col_date,"yyyy-mm-dd") <="'+string(date2,'yyyy-mm-dd')+'"'
dw_xxx.setfilter(ls_filter)
dw_xxx.filter()
dw_xxx.sort() // 按原始顺序排序。

三、如果是嵌入SQL语法的时间查询,则:
MSS sql Server,Sybase SYB,Sybase SQL Anywhere中
select * from table_xxx where
beg_time >= ('2000-08-15 12:20:25:000');
ORACLE中:
beg_time >= '15-9月-2000' ; // 奇怪的格式。

其他:
可以通过该RDBMS所带的 sql 工具来执行查询,select beg_time from xxx ,然后得出格式

sincerity 2002-01-08
  • 打赏
  • 举报
回复
你应该先看看 ldt_bt 和 ldt_et 的值对不对。
ldt_bt = DateTime(Trim(sm_Begin.text))
ldt_et = DateTime(Trim(sm_End.text))
好像你这种写法得不出正确的结果,DateTime() 不是这种用法。
dongp 2002-01-08
  • 打赏
  • 举报
回复
你检查ldt_bt和ldt_et 的值先,MESSAGE出来看看,应该问题在这里

401

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧