oracle细节之字符串排序问题记录_oracle字符串排序如何10排在9后面-程序员宅基地

技术标签: # Oracle文库  Oracle  

本博客记录一下一次踩坑记录,过程是这样的,在跟一个bug,涉及到一张中间表,然后这张中间表的主键是自增的,不过因为对接其它系统,出现了主键唯一性冲突,所以我就只好改数据了,思路是想查最大值,然后修改数据。原本认为既然是一张中间表,那我不改关联表就好,我改中间表的主键应该不会影响系统。不料还是出现了数据问题了。

查询这张中间表的主键的最大值时,我并没有注意到是varchar类型的,以为是number类型的,数据库采用Oracle。PS:Oracle并没有int类型,这点和MySQL不一样。

查询到间表的id最大的值,很自然的,就敲条sql
select max(id) from Table a;
这条sql就得到最大值,看起来很正常,不过我并没有注意到这个id是varchar类型,所以开发过程,需要仔细一点,虽然我们都知道这个道理,不过在项目很赶,或者状态不好的情况,还是很多人不仔细,所以我还是记录一下,仅仅是作为个人的笔记记录一下而已,然后仅仅是参考,希望能给别人一些启发。

我查出的最大值是9999,不过偶然发现,竟然有个10000+的数值,这样我就纳闷了。所以,这里说一下,这个id是字符串类型的,字符串类型的排序和number类型的排序是不一样的,Oracle字符串比较大小是根据ASCII来的,字符串排序是先比较第一个字符,eg:这里列举"9"和"10"的列子,这里的"9"和"10"都是字符串类型的,比较过程是这样的,先从第一个字符比较,'9’比’1’大,所以,"9"排在前面,"10"排在后面。PS:字符串比较就是这样根据ASCII来,先比较第一个字符,如果相等,在比较第二个字符,以此类推…

所以SQL:select max(id) from Table a;就会出现"9"比"10"大的情况,这里的id是字符串类型。
要得出正确的情况:在Oracle里就要用SQL:

	select max(to_number(id)) from Table a;

然后我在改数据的过程出现了问题,然后幸好有公司导师相助,得到了一条数据库回滚的SQL,所以还是学到了。下面给出SQL,希望可以帮助学习的人

【表数据恢复回N分钟之前】

alter table 表名 enable row movement; 
flashback table 表名 to timestamp systimestamp - interval 'N' minute; 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014427391/article/details/81259364

智能推荐

opencv色彩空间转换bgr2hsv自己实现_opencv color_bgr2hsv-程序员宅基地

文章浏览阅读102次。【代码】opencv色彩空间转换bgr2hsv自己实现。_opencv color_bgr2hsv

Docker最全教程之使用Docker搭建Java开发环境_为什么docker不用java开发-程序员宅基地

文章浏览阅读1.8k次。前言Java是一门面向对象的优秀编程语言,市场占有率极高,但是在容器化实践过程中,发现官方支持并不友好,同时与其他编程语言的基础镜像相比(具体见各语言镜像比较),确实是非常臃肿。JavaJava是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此[Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java具有简单性、面向对象、分布式、健壮性、_为什么docker不用java开发

如何利用装饰者模式在不改变原有对象的基础上扩展功能-程序员宅基地

文章浏览阅读421次。作者:双子孤狼blog.csdn.net/zwx900102/article/details/107740212阅读目录什么是装饰者模式普通示例装饰者模式示例类图关系装饰者模式使用场景装..._java,不影响原有程序基础上,运行别的功能

json的中换行符的处理_josn文件中的\处理-程序员宅基地

文章浏览阅读3.3w次,点赞2次,收藏5次。json作为ajax常用的一种数据类型,经常使用。但如果字段中出现换行符如何处理? 去掉显然不合适。有些字段本来就有换行符,如何能去掉? 测试一下json类的处理,也没有发现。想不到最终的处理确实如此简单:后台代码把换行符\r\n替换为\\r\\n,前台代码js收到的字符就是\r\n_josn文件中的\处理

vue render 函数详解 (配参数详解)_vue的render函数-程序员宅基地

文章浏览阅读519次,点赞5次,收藏7次。vue render 函数详解 (配参数详解)_vue的render函数

阿里百秀移动端首页-程序员宅基地

文章浏览阅读543次,点赞12次,收藏7次。bootstrap在设置字体图标时,通过引用相关字体图标的类名,就可直接在该元素前面添加一个伪元素放至字体图标,调整字体图标的位置时直接设置该元素的before伪元素即可。超小屏幕时阿里百秀图片隐藏,被替代为文字,给图片添加类名hidden-xs即可,事先准备好一个盒子来装文字,再让该文字只在超小屏幕显示即可,即添加类名visible-xs。,里面的a元素宽高撑满,a里的元素宽高也撑满,切记不可设置margin,设置li的宽度时,左边为50%,右边为25%,若使用margin则会把右边的图片挤下去。

随便推点

uniapp如何引入腾讯位置服务微信小程序插件_uniapp 微信小程序 腾讯地图插件-程序员宅基地

文章浏览阅读181次。2,去腾讯位置服务控制台配置应用信息,官网地址:https://lbs.qq.com。一定要启用WebServiceAPI,并添加域名白名单servicewechat.com。其中插件appid可以去微信公众平台依次选择设置>第三方设置,其中有插件管理。选择申请过的插件,点击详情即可查看。3,unaipp项目中打开manifest.json文件,切换到源码视图,依次配置好截图中配置项。4,小程序内打开选点插件代码示例,在需要的地方调用即可。1,先去微信公众平台申请需要接入的小程序插件。_uniapp 微信小程序 腾讯地图插件

Vitis下运行DNNDK例程编译错误分析与解决_vitis ai去掉ddnk-程序员宅基地

文章浏览阅读853次。Vitis下运行DNNDK例程编译错误分析与解决出现问题:最新在Vitis下运行DNNDK例程时,(例程地址https://github.com/Xilinx/Vitis-In-Depth-Tutorial/blob/2020.1/Vitis_Platform_Creation/Introduction/02-Edge-AI-ZCU104/README.md)运行到编译时,(20 Right click the hello_dpu project folder and select Build Pro_vitis ai去掉ddnk

异常 Non-terminating decimal expansion; no exact representable decimal result的解决方法_non-terminating decimal expansion; no exact repres-程序员宅基地

文章浏览阅读4.3k次。今天在写多线程分页同步数据的时候报错:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。发现报错的语句是:int pageSize = new BigDecimal(rCnt).divide(new BigDecimal(300)).setScale(0, BigDecimal.ROUND_UP).intValue();解决办法在 java _non-terminating decimal expansion; no exact representable decimal result.

Android DrawerLayout 和ViewPager滑动冲突解决_drawerlayout和viewpager冲突-程序员宅基地

文章浏览阅读2.3k次。最近遇到项目整体是Activity搭配DrawerLayout的抽屉样式,在左侧抽屉的顶部,有一个ViewPager无限轮播。并要求ViewPager左滑下一页,右滑上一页,3秒自动轮播下一页,点击按住停止轮播。同时DrawerLayout的NavigationMenuView左滑打开,右滑关闭。滑动事件同时存在,手指滑动头部区域ViewPager响应,滑动其他区域DrawerLayout打开or..._drawerlayout和viewpager冲突

Unity3d-Unable to locate Android SDK &&Failed to re-package resources._unityexception: android sdk not found unable to lo-程序员宅基地

文章浏览阅读6.6k次,点赞2次,收藏3次。在设置里面配置 sdk 路径。 Unity-Preferences-external tools-sdk(具体的sdk可以去官网下载)解决办法,删除build tool 24,unity就会使用build tool 23进行打包!!根本不支持build tool 24_unityexception: android sdk not found unable to locate android sdk. unityeng

《数据结构》— 线段树知识点模版详解_线段树考点-程序员宅基地

文章浏览阅读696次。线段树详解第一部分1.定义:线段树(Segment Tree)是一种二叉搜索树,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2,b]。因此线段树是满二叉树,最后的子节点数目为N,即整个线段区间的长度。使用线段树可以快速的查找某一..._线段树考点

推荐文章

热门文章

相关标签