服务器 频道

PL/SQL学习笔记之五

  【IT168 服务器学院】日期和日期时间算术

  运算  返回类型
  结果 

  d1-d2  NUMBER
  返回D1和D2之间相差的天数。该值是一个数值,其小数部分代表一天的几分之几。

  dt1-dt2  INTERVAL
  返回DT1和DT2之间的时间间隔。

  i1-i2  INTERVAL
  返回i1和i2之间的差距。

  d1+d2  N/A
  非法——仅能进行两个日期之间的相减。

  dt1+dt2  N/A
  非法——仅能进行两个日期之间的相减。

  i1+i2  INTERVAL
  返回i1和i2的和。

  d1+n  DATE
  在D1上加上N天作为DATE类型返回。N可以是实数,它包含一天的几分之几。

  d1-n  DATE
  从D1上减去N天作为DATE类型返回。N可以是实数,它包含一天的几分之几。

  dt1+i1  DATETIME
  返回DT1和I1的和。

  dt1-i1  DATETIME
  返回DT1和I1之间的差距。

  i1*n  INTERVAL
  返回I1的N次方。

  i1/n  INTERVAL
  返回I1除以N的值。

  表中注:
  D1和D2指日期值;
  DT1和DT2指日期时间值;
  I1和I2指时间间隔值;
  N指数字值。

  显示转换:(conversion)

  TO_NUMBER(char[,''format_model''])  字符转换到数字类型
  

  TO_DATE(char[,''format_model''])  字符转换到日期类型
  格式说明符:要与前边要转换的字符串的格式要相同才能转换(匹配问题:格式和位数)。

  TO_CHAR(date[,''format_model''[,nlsparams]])
  第二个参数可以省略,不指定格式,按系统默认格式输出。
  区分大小写。
  使用FM(在格式控制符前添加)符号可以去掉空格或是首位的零。
  如果指定了NLSPARAMS,则它控制返回字符串的月和日分量所使用的语言。格式为:
  ''NLS_DATA_LANGUAGE=language'',language指需要的语言。
  例:
  select to_char(sysdate,''FMyyyy-mm-dd'') from dual;
  格式控制符的类型:
  YYYY 四位的年
  YEAR 年的拼写      
  MM  2位数字的月
  MONTH 月的全名
  MON 月名的前三个字符
  DY 星期名的前三个字符
  DAY 星期名的全称
  DD 2位的天 
  时间格式控制符:
  HH24:MI:SS AM
  HH12:MI:SS PM
  
  通过“”来实现加入特殊字符的格式控制符。
  SELECT TO_CHAR(SYSDATE,''FMyyyy"年"mm"月"dd"日"'') from dual;

    DDSPTH
  ~~ 
  DD是格式控制符。 
  TH是序数词,将日期转换成英文的序数词拼写。
  SP是基数词,将日期转换成英文的基数词拼写。

  TO_CHAR(NUM[,''format_model''[,nlsparams]])转换数字

  将NUMBER类型参数NUM转换成VARCHAR2类型。如果指定FORMAT,它会控制整个转换。
  如果没有指定FORMAT,那么结果字符串中将包含和NUM中有效位的个数相同的字符。NLSPARAMS用来指定小数点和千分符及货币符号。它的格式可为:''NLS_NUMERIC_CHARS='' '' dg '' ''NLS_CURRENCY= '' ''string'' '' ''
  d和g分别代表小数点和千分符。STRING代表货币符号。  

  数字格式控制符:

  9 代表一位数字(替换符。有,数字显示;没有。不什么都显示。) 
  0 代表一位数字(有数字,显示;没有,强制显示0。) 
  $ 美圆符号
  L 本地货币
  . 小数点
  , 千分符
  B 当整数部分为0时,将整数部分填充为空格。 例:B999
  MI  返回带有后继符号而不是前导负号的负数值,正数值将带有后继的空格。999MI 
  S 返回一个前导符号或后继符号,正数为+,负数为-。 S9999 或 9999S
  PR  使用尖括号返回负数。正数将有前导或后继空格。999PR
  D 在指定位置返回一个小数点。两侧的9的个数指定了最大的位数。99D9
  G 在指定位置返回千分符,G可以在FORMAT_model中出现多次。9G999G9
  C 在指定位置返回ISO货币符号。C可以在FORMAT_model中出现多次。C99
  L 在指定位置上返回本地货币符号。 L99
  V 返回一个被乘以10的N次方的数值,这里N是V后边9的个数。99V99
  EEEE 使用科学记数法返回该数值。9.99EEEE
  RM 使用大写的罗马数字表示返回该数值。 RM
  rm 使用小写的罗马数字表示返回该数值。 rm
  FM 返回不含前导和后继空格的数值。 FM99.09
  
  格式控制符位数一定要大于或等于NUMBER的位数,不能小于。

  用RR解决跨世纪问题:
   小于50的认为是1950-2050
   大于50的认为是1951-1999   

  数字和日期是不能相互转换的。

  ASCIISTR(string) 

  返回只包含有效的SQL字符和斜线的字符串。string中的任何无效的字符将被转换为一个相当的数字,在之前加上斜线。
  
  BIN_TO_NUM(num[,num]...) 

  将一位矢量转换位相当的数字。它的参数是一系列逗号隔开的NUMS,每一个都必须是0或1。
  例如BIN_TO_NUM(1,0,1,1)将返回11,因为11的二进制表示是1011。当使用分组集合和GROUP BY 子句时该函数很有用。     CHARTOROWID(x)函数,

  将字符串转换成一个ROWID类型的值,注意格式必须采用ROWID数据类型格式,即“数据块号:行序号:数据文件号”。
  
  COMPOSE(string) 

  以相同字符集中完全规格化Unicode形式返回string.string可以是CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB或NCLOB类型。
  

  DECOMPOSE(string)

  返回一个Unicode字符串。它是string的规范分解。string可以是CHAR、VARCHAR2、 NCHAR、NVARCHAR2、CLOB或NCLOB类型。      

  FROM_TZ(timestamp,timezone)

  返回一个TIMESTAMP WITH TIMEZONE 类型值。它将TIMESTAMP(没有时区信息)和提供的TIMEZONE组合在一起。

  HEXTORAW(string)

   将由STRING表示的二进制数值转换为一个RAW数值。STRING应该包含十六进制值。STRING中的每两个字符表示结果RAW中的一个字节。HEXTORAW和RAWTOHEX互为反函数。 

  NUMTODSINTERVAL(x,unit)

  将X转换为INTERVAL DAY TO SECOND 值,X应该是一个数字。UNIT是一个字符字符串(可以是CHAR、VARCHAR2、NCHAR或NVARCHAR2),且是''DAY''、''HOUR''、''MINUTE''、''SECOND''之一。unit是不区分大小写的,返回值的缺省精度为9。

  NUMTOYMINTERVAL(x,unit)

  将X转换成INTERVAL YEAR TO MONTH 值,X应该是一个数字。UNIT是一个字符字符串(可以是CHAR、VARCHAR2、NCHAR或NVARCHAR2),且是''YEAR''或''MONTH''之一。unit是不区分大小写的,返回值的缺省精度为9。 

  REFTOHEX(refvalue)

  返回一REF refvalue的十六进制表示。

  RAWTOHEX(rawvalue)

  将RAW类型值rawvalue转换为一个十六进制表示的字符串。rawvalue中的每个字节转换为一个双字符的字符串。

  RAWTONHEX(rawvalue)

  将RAW类型值rawvalue转换为一个十六进制表示的字符串。rawvalue中的每个字节转换为一个双字符的字符串。
  RAWTONHEX返回值是NVARCHAR2类型而不是VARCHAR2类型。

  ROWIDTOCHAR(rowid)函数,将ROWID类型值转换成字符串。与CHARTOROWID互为反函数。

  ROWIDYONCHAR(rowid) 与ROWIDTOCHAR类似,返回类型是NCHAR,而不是CHAR。

  TO_CLOB(string)

  将string转换为CLOB。string可以是文字或另一个LOB列。如果参数包含NCHAR数据,它被转换为数据库字符集

  TO_DSINTERVAL(string[,nlsparams])

  将string(可以是CHAR、VARCHAR2、NCHAR、NVARCHAR2)转换为 INTERVAL DAY TO SECOND 类型。如果
  选定nlsparams,则nlsparams只能包含小数点和千分位字符的NLS_NUMERIC_CHARARCTERS表示。

  TO_LOB(long_column)

  将long_column转换成LOB。这个函数用于将LONG和LONG RAW分别转换为CLOB和LOB。

  TO_MULTI_BYTE(string)

  返回将所有单字节字符替换为等价的多字节字符的STRING。该函数仅当数据库字符集同时包含单字节和多字节字符时才使用。否则,STRING不会进行任何处理而被返回,与TO_SINGLE_BYTE 互为反函数。
  TO_NCHAR

  和TO_CHAR相似,结果是属于国家字符集而不是数据库字符集。

  TO_NCLOB(string)

  将STRING转换为NCLOB。STRING可以是文字或另一LOB列。

  TO_SINGLE_BYTE(string)

  返回将所有双字节字符替换为等价的单字节字符的STRING。。该函数仅当数据库字符集同时包含单字节和多字节字符时才使用。否则,STRING不会进行任何处理而被返回,与TO_MULTI_BYTE 互为反函数。

  TO_TIMESTAMP(string[,format[,nlsparams]])

  将其参数CHAR或VARCHAR2类型string转换成TIMESTAMP类型。

  TO_TIMESTAMP_TZ(string[,format[,nlsparams]])

  将其参数CHAR或VARCHAR2类型string转换成 TIMESTAMP WITH TIMEZONE 类型。

  TO_YMINTERVAL(string)

  将string(可以是CHAR、VARCHAR2、NCHAR、NVARCHAR2)转换为INTERVAL YEAR TO MONTH 类型。
  TO_YMINTERVAL与TO_DSINTERVAL相似,除了它不能使用NLS参数作为参数并返回YEAR TO MONTH时间间隔而不DAY TO SECOND 时间间隔。

0
相关文章