oracle中按日期查询报错问题和merge into语句的

12 篇文章 0 订阅

1 ORA-01858 :在要求输入数字处找到非数字字符

这两个一起记述的主要原因是需要这样做,且报错了。。。

我先贴出我的sql语句来:

出错原因是:preparedstatement在执行的时候不能把红框内的串替换为sql中的问号,主要是to_date函数替换不了,解决办法是将to_date函数先放到sql语句中,然后替换后面的变量,就不报这个错误了。

这句是直接摘抄人家的:ORA-01858 :在要求输入数字处找到非数字字符

正确语句如下:

好了,就这样,date查询报错的问题就解决了。

2 接下来看看oracle中插入或修改操作

该操作是进行插入操作或修改操作:

首先:

 USING (SELECT COUNT(read_book) read_book FROM user_record WHERE"+ " uptime =to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss') u1

这句首先统计read_book字段中的数字是否大于0,因为如果计数为0,表示表中没有该时间点的记录。

接着,根据是否大于0来进行匹配,若匹配(when matched then),表示进行更新操作,若不匹配(when not matched then),表示进行插入操作。

public Integer insertOrupdateUserBooking(String date,String userno,String username) throws SQLException {
		DateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		String dateStr = dateformat.format(new Date());
		
		QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "MERGE INTO user_record oumd"
				+ " USING (SELECT COUNT(read_book) read_book FROM user_record WHERE"
				+ " uptime =to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss') u1"
				+ " on (u1.read_book>0)"
				+ " WHEN MATCHED THEN "
				+ " UPDATE SET read_book=(u1.read_book+1),UPDATETIME=to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss') WHERE"
					+ " uptime =to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss') and user_no=\'"+userno+"\'"
					+ " and username=\'"+username+"\'"
				+ " WHEN NOT MATCHED THEN"
				+ " INSERT (uptime ,user_no,USERNAME,read_book,CREATETIME)"
				+ " VALUES(to_date(\'"+date+"\','yyyy/MM/dd HH24:mi:ss'),\'"+userno+"\',\'"+username+"\',1,to_date(\'"+dateStr+"\','yyyy/MM/dd HH24:mi:ss'))";
		int result = runner.update(sql);
		return result;
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值