今天碰到一个比较奇怪的现象,无法根据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的值进行数据访问相关推荐

  1. Oracle内核参数介绍

    内核参数大致可以分为4类: 共享内存(shared memory) 信号量(semaphores) 网络(network) 打开文件(open files) 一.共享内存 共享内存是用于进程间通信的一 ...

  2. sap oracle 内存参数,ORACLE 25个需要深思熟虑重要的初始化参数

    此内容摘自 ORACLE 11gR2性能调整与优化一书,做为一个自己的笔记 1 MEMORY_TARGET : 这个初始化参数设定分配给PGA和SGA 的所有内存(11g 新参数).设置了MEMORY ...

  3. Oracle初始化参数含义

    Blank_trimming:  说明 : 如果值为TRUE,  即使源长度比目标长度  (SQL92  兼容) 更长,也允许分配数据. 值范围: TRUE | FALSE 默认值: FALSE se ...

  4. ORACLE初始化参数文件概述

    ORACLE初始化参数文件概述 在9i之前,参数文件只有一种,它是文本格式的,称为pfile,在9i及以后的版本中,新增了服务器参数文件,称为spfile,它是二进制格式的.这两种参数文件都是用来存储 ...

  5. Oracle 内存参数设置

    2019独角兽企业重金招聘Python工程师标准>>> oracle 实例结构: oracle实例 = 内存结构+进程结构 oracle进程=服务进程+用户进程 主要的后台进程有: ...

  6. Oracle cursor_sharing 参数 详解

    一. 官网的说明 http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/initparams042.htm#REFRN10025 ...

  7. linux安装oracle 操作系统内核参数 aio,Oracle Study之案例--安装Oracle内核参数配置

    Oracle Study之案例--安装Oracle内核参数配置 在Linux系统下,安装Oracle之前,除了检查操作系统的硬件和软件是否满足安装需要之外,一个重点就是修改内核参数,其中最主要的是和内 ...

  8. ORACLE初始化参数文件详细文档

    注明:本文不是介绍ORACLE初始化参数的具体配置及调优,本文仅介绍初始化参数配置文件PFILE和SPFILE的使用及相关内容说明. 1.简介 在9i之前,参数文件只有一种,它是文本格式的,称为pfi ...

  9. oracle locked time,ORACLE distributed_lock_timeout参数

    今天上午碰到一个报错: ORA-02049:timeout:distributed transaction waiting for lock 但是并未对业务造成实际影响,过了一段时间后好了.因为那段时 ...

最新文章

  1. [转]Web API Introduction to OData Services using ASP.NET Web API
  2. 浅析应届女生找工作的一些忧虑和困惑
  3. python3 字符串转数组 数组转字符串 切片操作
  4. 路要怎么走?关于程序员成长的一点思考
  5. 【资料下载】Python 第三讲——正则表达式爬取糗事百科数据...
  6. SQL Server 动态生成数据库所有表Insert语句
  7. MQTT-SN协议乱翻之消息格式
  8. ADO之connection
  9. 【VMware vSAN 6.6】6.2.启用性能服务:vSAN硬件服务器解决方案
  10. 【转】如何从SharePoint Content DB中查询List数据***
  11. Socket通信客户端设计(Java)
  12. Leetcode: 二叉树的后序遍历
  13. 小程序用php的优势,小程序的特点及优势?
  14. 【数字信号调制】基于matlab GUI AM+FM+DSB+SSB调制解调【含Matlab源码 1212期】
  15. linux下order by 报出ORDER BY clause is not in SELECT list
  16. 80ms 求解世上最难数独 —— DFS的灵活运用
  17. 串口和并口和网口区别
  18. 什么是DOM0,DOM2,DOM3?
  19. Android4.1
  20. Proofs for Inner Pairing Products and Applications 学习笔记

热门文章

  1. 云安全:Cloudstack云平台搭建详解及经验总结
  2. py2neo的neo4j数据库增删改查节点node、关系relationship、属性property操作
  3. 上周热点回顾(2.13-2.19)
  4. 用深度学习做了下中国股市预测,结果是...
  5. 树莓派开始,玩转Linux13:你好,文件
  6. 黑、黄教堂等试音碟及其他
  7. XML操作类(Seaskyer)
  8. Webview模块管理应用窗口界面,实现多窗口的逻辑控制管理操作(中)
  9. SQLServer主从同步配置(Log Shipping方式)
  10. 奥迪坚助力富友集团搭建 “收件宝”客服系统平台