to_char函数的功能是将date、datetime、numeric的值转化成字符串表达式。其实我理解to_char的核心就是把你输入的一个日期格式的字符串,通过IFX自己定义的表达式规则匹配出来,然后做格式转化,最后拼出你想要的字符串。这里的格式转化规则需要好好学习和总结,需要深入理解。在to_date的时候其实是反过来处理的,把你输入的字符串,根据你的IFX提供的处理规则,整理出你可以使用的日期格式,输出格式需要参考DATETIME环境变量的格式。
to_char函数需要两个参数,第一个参数表示需要转化的源;第二个参数表示需要转化成字符串的输出格式。如果第一个参数是NULL,则函数返回值为NULL。
begin_date被定义为date类型,
SELECT TO_CHAR(begin_date, ’%A %B %d, %Y %R’) FROM tab1;
返回值的输出格式与数据库的字符集有关系:
en_us.819为:Wednesday July 25, 2013 18:45
zh_cn.gb18030-2000为:星期日 4月 21,2019 0:0
begin_date被定义为datetime year to second类型,
SELECT TO_CHAR(begin_date, ’%A %B %d, %Y %R’) FROM tab1; 输出为:星期日 4月 21,2019 10:09
SELECT TO_CHAR(begin_date, ’%A %B %d, %Y’) FROM tab1; 输出为:星期日 4月 21,2019
===================================================================================
%A Full weekday name, as defined in the locale
%a 星期的短格式,如Sun
%B Full month name, as defined in the locale
%b 月份的短格式,如Apr
%d Day of the month as an integer (01 through 31). A single-digit value is preceded by a zero (0).
%Y Year as a 4-digit decimal number
%R Time in 24-hour notation (equivalent to %H:%M format, as defined below).
%D %m/%d/%y 格式
%e 1-31日,前面不补0的格式
%h 只显示月份
%H 两个数字显示00-23点
%I 两个数字显示00-11
%M 表示00-59分
%T 表示%H:%M:%S
%w 用0-6表示星期
%y 用两位数字表示年
%Fn 表示fraction的0-5位
SELECT TO_CHAR(CURRENT YEAR TO FRACTION(5),"%Y-%m-%d %H:%M:%S.%F") FROM sysmaster:sysdual;
如果你省略了第二个参数,没有设置字符串的输出格式,to_char会使用环境变量DBTIME或DBDATE设置的格式,如果不在默认区域会使用环境变量GL_DATETIME、GL_DATE指定的格式。
select gbase_to_char(id,"-$******.*****") from t 输出格式为: $123456.78920
我理解数字转化成字符的使用概率并不高,通常是直接用数据库的隐式转化就解决了:
create table t (id decimal(10,4));
create table t1 (id varchar(255))
insert into t1 select id from t; 隐式转化
to_date函数的目的是转化一个字符串为一个datetime类型的值。这个过程可以理解成to_char函数的逆过程。
UPDATE tab1 SET begin_date = TO_DATE(’Wednesday July 25, 2007 18:45’,’%A %B %d, %Y %R’);
select gbase_to_date(substr("Mon Aug 05 11:25:35 CST 2019",0,19)||substr("Mon Aug 05 11:25:35 CST 2019",24,5),'%a %b %d %T %Y') from t1