oracle tz_offset 参数,无法根据TZ_OFFSET的值进行数据访问
今天碰到一个比较奇怪的现象,无法根据TZ_OFFSET函数的返回值,进行查询。
TZ_OFFSET函数是Oracle根据时区名称,返回时区与0时区相差的小时和分钟数。
SQL> SELECT TZ_OFFSET('Asia/Shanghai') FROM DUAL;
TZ_OFFS
-------
+08:00
比如这个例子中,对于Asia/Shanghai这个时区,返回了+08:00,说明上海这是时区是东八区。
不过使用这个函数的时候也发现了一个奇怪的现象,比如再V$TIMEZONE_NAMES视图中,包含了Oracle支持的所有时区名称和时区简称,但是没有办法根据TZ_OFFSET的结果来反查这张表:
SQL> SELECT TZNAME, TZABBREV, TZ_OFFSET(TZNAME)
2 FROM V$TIMEZONE_NAMES
3 WHERE TZ_OFFSET(TZNAME) = '+08:00';
未选定行
刚刚已经查询到时区为+08:00的时区了,为什么指定时区的OFFSET却找不到呢,莫非其中的字符+或:的全角和半角出了问题。
将上面的查询结果直接拷贝过去,问题依旧,仍然无法查询到结果。
尝试模糊查询:
SQL> SELECT TZNAME, TZABBREV, TZ_OFFSET(TZNAME)
2 FROM V$TIMEZONE_NAMES
3 WHERE TZ_OFFSET(TZNAME) LIKE '+08:00%';
TZNAME TZABBREV TZ_OFFS
---------------------------------------- ------------------------------ -------
Asia/Chongqing LMT +08:00
Asia/Chongqing LONT +08:00
Asia/Chongqing CST +08:00
.
.
.
ROC LMT +08:00
ROC CST +08:00
ROC CDT +08:00
Singapore LMT +08:00
Singapore SMT +08:00
Singapore MALT +08:00
Singapore JST +08:00
Singapore SGT +08:00
已选择89行。
模糊匹配可以得到结果,而直接查询却无法得多结果,这说明TZ_OFFSET的返回值还包含了其他的字符。
观察上面的结果也可以看到,根据字符串类型的特点,+08:00后面应该还有1个不可见的字符,否则TZ_OFFSET这个列显示的就不是TZ_OFFS而应该是TZ_OFF。
下面看看TZ_OFFSET返回结果的长度:
SQL> SELECT LENGTH(TZ_OFFSET('Asia/Shanghai')) FROM DUAL;
LENGTH(TZ_OFFSET('ASIA/SHANGHAI'))
----------------------------------
7
果然这里包含了一个不可见的字符,通过DUMP来看看到底是什么:
SQL> SELECT DUMP(TZ_OFFSET('Asia/Shanghai'), 16)
2 FROM DUAL;
DUMP(TZ_OFFSET('ASIA/SHANGHAI'),16)
-----------------------------------------------------------
Typ=1 Len=7: 2b,30,38,3a,30,30,0
居然是0,注意这个0不是数值0,而是ASCII码0值,也就是C语句中字符串的结束符“\0”。
在Oracle中这个值可以用CHR(0)来表示,于是上面的查询可以改为:
SQL> SELECT TZNAME, TZABBREV, TZ_OFFSET(TZNAME)
2 FROM V$TIMEZONE_NAMES
3 WHERE TZ_OFFSET(TZNAME) = '+08:00' || CHR(0);
TZNAME TZABBREV TZ_OFFS
---------------------------------------- ------------------------------ -------
Asia/Chongqing LMT +08:00
Asia/Chongqing LONT +08:00
Asia/Chongqing CST +08:00
Asia/Chongqing CDT +08:00
.
.
.
Singapore MALT +08:00
Singapore JST +08:00
Singapore SGT +08:00
已选择89行。
这里来看一看TIMESTAMP类型的DUMP结果:
SQL> SELECT DUMP(TIMESTAMP '2009-3-8 20:57:32.23 +08:00', 16)
2 FROM DUAL;
DUMP(TIMESTAMP'2009-3-820:57:32.23+08:00',16)
-------------------------------------------------------------
Typ=188 Len=20: d9,7,3,8,c,39,20,0,80,85,b5,d,8,0,5,0,0,0,0,0
无论是在时区8的后面,还是在DUMP结果的最后,都有CHR(0)的存在,可能正式由于TIMESTAMP类型的特点,导致了TZ_OFFSET返回结果后面添加了一个CHR(0)。
oracle tz_offset 参数,无法根据TZ_OFFSET的值进行数据访问相关推荐
- Oracle内核参数介绍
内核参数大致可以分为4类: 共享内存(shared memory) 信号量(semaphores) 网络(network) 打开文件(open files) 一.共享内存 共享内存是用于进程间通信的一 ...
- sap oracle 内存参数,ORACLE 25个需要深思熟虑重要的初始化参数
此内容摘自 ORACLE 11gR2性能调整与优化一书,做为一个自己的笔记 1 MEMORY_TARGET : 这个初始化参数设定分配给PGA和SGA 的所有内存(11g 新参数).设置了MEMORY ...
- Oracle初始化参数含义
Blank_trimming: 说明 : 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长,也允许分配数据. 值范围: TRUE | FALSE 默认值: FALSE se ...
- ORACLE初始化参数文件概述
ORACLE初始化参数文件概述 在9i之前,参数文件只有一种,它是文本格式的,称为pfile,在9i及以后的版本中,新增了服务器参数文件,称为spfile,它是二进制格式的.这两种参数文件都是用来存储 ...
- Oracle 内存参数设置
2019独角兽企业重金招聘Python工程师标准>>> oracle 实例结构: oracle实例 = 内存结构+进程结构 oracle进程=服务进程+用户进程 主要的后台进程有: ...
- Oracle cursor_sharing 参数 详解
一. 官网的说明 http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/initparams042.htm#REFRN10025 ...
- linux安装oracle 操作系统内核参数 aio,Oracle Study之案例--安装Oracle内核参数配置
Oracle Study之案例--安装Oracle内核参数配置 在Linux系统下,安装Oracle之前,除了检查操作系统的硬件和软件是否满足安装需要之外,一个重点就是修改内核参数,其中最主要的是和内 ...
- ORACLE初始化参数文件详细文档
注明:本文不是介绍ORACLE初始化参数的具体配置及调优,本文仅介绍初始化参数配置文件PFILE和SPFILE的使用及相关内容说明. 1.简介 在9i之前,参数文件只有一种,它是文本格式的,称为pfi ...
- oracle locked time,ORACLE distributed_lock_timeout参数
今天上午碰到一个报错: ORA-02049:timeout:distributed transaction waiting for lock 但是并未对业务造成实际影响,过了一段时间后好了.因为那段时 ...
最新文章
- [转]Web API Introduction to OData Services using ASP.NET Web API
- 浅析应届女生找工作的一些忧虑和困惑
- python3 字符串转数组 数组转字符串 切片操作
- 路要怎么走?关于程序员成长的一点思考
- 【资料下载】Python 第三讲——正则表达式爬取糗事百科数据...
- SQL Server 动态生成数据库所有表Insert语句
- MQTT-SN协议乱翻之消息格式
- ADO之connection
- 【VMware vSAN 6.6】6.2.启用性能服务:vSAN硬件服务器解决方案
- 【转】如何从SharePoint Content DB中查询List数据***
- Socket通信客户端设计(Java)
- Leetcode: 二叉树的后序遍历
- 小程序用php的优势,小程序的特点及优势?
- 【数字信号调制】基于matlab GUI AM+FM+DSB+SSB调制解调【含Matlab源码 1212期】
- linux下order by 报出ORDER BY clause is not in SELECT list
- 80ms 求解世上最难数独 —— DFS的灵活运用
- 串口和并口和网口区别
- 什么是DOM0,DOM2,DOM3?
- Android4.1
- Proofs for Inner Pairing Products and Applications 学习笔记
热门文章
- 云安全:Cloudstack云平台搭建详解及经验总结
- py2neo的neo4j数据库增删改查节点node、关系relationship、属性property操作
- 上周热点回顾(2.13-2.19)
- 用深度学习做了下中国股市预测,结果是...
- 树莓派开始,玩转Linux13:你好,文件
- 黑、黄教堂等试音碟及其他
- XML操作类(Seaskyer)
- Webview模块管理应用窗口界面,实现多窗口的逻辑控制管理操作(中)
- SQLServer主从同步配置(Log Shipping方式)
- 奥迪坚助力富友集团搭建 “收件宝”客服系统平台