informix中to_char(),to_date函数
informix⽇期时间格式化输出
⼀下内容转⾃:blog.csdn/amaryh/archive/2010/02/02/5282634.aspx
⼀个 datetime 型的字段可以存储的⽇期范围是从 1753 年 1 ⽉ 1 ⽇第⼀毫秒到 9999 年 12 ⽉ 31 ⽇最后⼀毫秒。如果你不需要覆盖这么⼤范围的⽇期和时间,你可以使⽤ SMALLDATETIME 型数据。它与 datetime 型数据同样使⽤,只不过它能表⽰的⽇期和时间范围⽐datetime 型数据⼩,⽽且不如 datetime 型数据精确。⼀个 SMALLDATETIME 型的字段能够存储从 1900 年 1 ⽉ 1 ⽇到 2079 年 6⽉ 6 ⽇的⽇期,它只能精确到秒。
datetime 数据类型的操作
1、⽇期的截取
⽤ extend 截取⽇期的部分值,如:
start_time='2004-06-15 11:12:13' 本⽂以下出现的 start_time 均为 datetime year to second
extend(start_time,year to month)='2004-06'
extend(start_time,hour to hour)='11'
要说明的是:以上函数返回的 '2004-06'和'11' 的类型仍然都是 datetime 型,⽆法直接进⾏加减操作。
2、⽇期的计算
应⽤中经常会⽤到⽇期的加减,⽐如取当前⽇期的前⼀天或指定⽇期的前⼀天等,这种操作不好说,还是看看下⾯的例⼦说明问题:
select
curretn
current year to day - interval(9) day to day,
current year to second - interval(9) minute to minute
from tab1
将会返回:
2004-06-13 19:30:42.000
2004-06-04
2004-06-13 19:21:42
不知这样⼤家明⽩没。
类型转换
前⽂提到的 extend(start_time,hour to hour)='11'的结果仍然是 datetime 型,如果要进⾏类型转换的话:
1、extend(start_time,hour to hour)||''将返回 char 型,extend (start_time,hour to hour)||''+0将返回 integer
型,extend(start_time,hour to hour)||''+0.0 将返回 float 型,虽然样⼦不太好看,不过效果不错。
类似 extend(start_time,hour to hour)||''+0 这样的⽅法可以在 select 中使⽤,但在 create view 的时候使⽤则会发⽣语法错误(IDS 9.4)。
year to second,时间精确到秒
year to day,时间精确到⽇
year to fraction(3),时间精确到毫秒,即0.001秒,这是informix⽇期型最精确的定义。
2、⽤ to_char 函数: to_char(start_time) 将按原样返回 start_time 字段的字符形式,如:
SELECT TO_CHAR(start_time, '%A %B %d, %Y %R') FROM tab1
结果是:Wednesday July 23, 2003 18:45
其中: %A:周、%B:⽉(英⽂)、%m⽉(数字)、%d:⽇、%Y:年,%R:时间。
按照以上⽅法,⼤家可以将⽇期时间型按照⾃⼰喜欢的形状进⾏加⼯。
(IDS 9.4)
to_char(start_time)将按原样返回start_time字段的字符形式,如:???
SELECT? TO_CHAR(start_time,? '%A? %B? %d,? %Y? %R')? FROM? tab1
结果是:
Wednesday? July? 23,? 2003? 18:45
其中:
%A:周、%B:⽉(英⽂)、%m⽉(数字)、%d:⽇、%Y:年,%R:时间。
拆分出来可以这么写:to_char('20040615111213','%Y%m%d%H%M%S')
%A 和 %a对应,⼀个是全称,⼀个是缩写。
%B 和 %b对应,也是⼀个全称,⼀个缩写。
毫秒⽤%Fn,其中n表⽰精确到⼏位,缺省为2,有效值为0~5。要精确到⼀位、两位、三位的毫秒,n就⽤ 1,2,3表⽰。如:
SELECT first 1 to_char(current,'%a,%b %d,%Y %H:%M:%S%F3')? from systables;
输出:
Mon,May 11,2009 13:11:09.000
3、to_date 函数:
⽤法类似于 to_char,如: to_date('20040615111213','%Y%m%d%H%M%S')
将返回⼀个 datetime 型: 2004-06-15 11:12:13.00000
informix中的to_date
2012-09-13 21:30:51| 分类: | 标签:|字号⼤中⼩
和oracle中差别太⼤,记下。⽹上绝对很难搜到
TO_CHAR 函数(IDS)
TO_CHAR 函数将计算为 DATE、DATETIME 或数值的表达式转换为字符串。返回的字符串代表第⼀个参数指定的数据值,使⽤第⼆个参数format_string 参数指定的格式化掩码。
此函数的第⼀个参数必须是 DATE、DATETIME 或内置数字数据类型,或者是可以转换成这些数据类型之⼀的字符串。如果初始 DATE、DATETIME 或数字参数是 NULL,那么该函数返回 NULL 值。
此函数的第⼆个参数是指定格式化掩码的字符串。哪些字符适合该格式化掩码主要取决于 TO_CHAR 函数的第⼀个参数代表时间点还是数字。
格式化 DATE 和 DATETIME 表达式
format_string 参数不需要隐含与 TO_CHAR 函数第⼀个参数的值相同的时间单位。当 format_string 中隐含的精度与第⼀个参数中的DATETIME 限定符不同时,TO_CHAR 函数将扩展 DATETIME 值,如同其已经调⽤了EXTEND 函数。
在下⾯的例⼦中,⽤户要把 tab1 表的 begin_date 列转换成字符串。begin_date 列定义为 DATETIME YEAR TO SECOND 数据类型。⽤户使⽤带有TO_CHAR 函数的 SELECT 语句来执⾏此转换:
SELECT TO_CHAR(begin_date, '%A %B %d, %Y %R') FROM tab1;
在这个例⼦⾥⾯ format_string 参数中的符号具有下列含义。
符号
含义
%A
语⾔环境中定义的完整 weekday 名
%B
语⾔环境中定义的完整⽉份名
%d
⽤⼗进制数表⽰的每个⽉的⽇期
%Y
⽤ 4 位⼗进制数表⽰的年份
%R
24 ⼩时表⽰法的时间
请注意,在此⽰例中跟在 %d 规范后⾯的逗号(, )是⽂字字符,⽽不是 TO_CHAR 函数参数的分隔符。有关 DATE 和 DATETIME 格式符号和其含义的完整列表,请参阅《IBM Informix GLS ⽤户指南》 中的GL_DATE 和 GL_DATETIME 环境变量。
将此 format_string 应⽤到 begin_date 列会返回此结果:
Wednesday July 25, 2007 18:45
下⾯⽰例中的查询调⽤了 TO_CHAR ,将同⼀格式字符串应⽤到⼀个 ADD_MONTHS 表达式中,并且显⽰该查询的结果:
SELECT ship_date, TO_CHAR(ADD_MONTHS(ship_date, 1), '%A %B %d, %Y') AS survey_date FROM orders; ship_date 03/12/2007 survey_date Thursday April 12, 2007
当 DATETIME 或 DATE 表达式是第⼀个参数时,如果省略 format_string 参数,TO_CHAR 函数将缺省使⽤DBTIME 或 DBDATE 环境变量的设置,来格式化第⼀个参数中出现的值。在⾮缺省语⾔环境中,DATETIME 和 DATE 值的缺省格式由环境变量指定(例
如,GL_DATETIME 和GL_DATE )。
格式化数字和 MONEY 表达式
TO_CHAR 函数的 format_string 参数⽀持⽤于 ESQL 函数(例如,rfmtdec( ) 、rfmtdouble( ) 和rfmtlong( ) )的相同数字格式化掩码。在 IBM Informix ESQL/C Programmer's Manual 中有对数值的 IDS 数字格式化掩码(当将数字表达式格式化为字符串时)的详细描述。下⾯是对格式化掩码的简短摘要描述。
数字格式化掩码指定将数字表达式格式化为字符串时应⽤于某些数值的格式。此掩码是以下格式字符的组合:
符号
含义
*
此字符将⽤星号填充显⽰字段中本来为空的所有位置
&
此字符将⽤零填充显⽰字段中本来为空的所有位置
#
此字符将开始零更改为空格。使⽤此字符可以指定某个字段的向左侧的最⼤扩展。
<
此字符对显⽰字段中的数字进⾏左调整。它将开始零更改为空字符串。
,
此字符指明对值的整数部分进⾏分组(按三位为⼀组)的符号(从单位位置向左计算)。缺省情况下,此符号为逗号。可以⽤DBMONEY 环境变量设置此符号。在格式化数字中,仅当值的整数部分有四位或更多数位时才显⽰此符号。
.
此字符指明将货币值整数部分与⼩数部分分隔的符号。缺省情况下,此符号为句点。可以⽤ DBMONEY 环境变量设置此符
号。⼀个格式字符串只能有⼀个句点。
-
此字符为⽂字字符。当 expr1 ⼩于零时,该字符显⽰为减号。当您将⼏个减号组织在⼀⾏中时,⼀个减号将浮动到它能占据的最右边的位置;它不影响该数字及其货币符号。
+
此字符为⽂字字符。当 expr1 ⼤于或等于零时,该字符显⽰为加号,当 expr1 ⼩于零时显⽰为减号。当您将⼏个加号组织在⼀⾏中时,⼀个加号或减号将浮动到它能占据的最右边的位置;它不影响数字及其货币符号。
(
此字符为⽂字字符。它显⽰为负数左边的左圆括号。该字符是替换负数减号的⼀对圆括号之⼀。当您将⼏个左圆括号组织在⼀⾏中时,⼀个左圆括号将浮动到它能占据的最右边的位置;它不影响数字及其货币符号。
)
这是替换负数减号的⼀对圆括号之⼀。
$
此字符显⽰在数值前⾯的货币符号。缺省情况下,货币符号为美元符号($)。可以使⽤ DBMONEY 环境变量设置货币符号。
当您将⼏个美元符号组织在⼀⾏中时,⼀个美元符号将浮动到它能占据的最右边的位置;它不影响该数字及其货币符号。
string转date的方法格式化掩码中的其他任何字符在 TO_CHAR 函数返回的格式化值中重新按字⾯⽣成。
在下⾯三个⽰例中,TO_CHAR 函数 d_int 列表达式参数的值为 -12344455 。
此查询在 TO_CHAR 调⽤中没有指定格式化掩码:
SELECT TO_CHAR(d_int) FROM tab_numbers;
下表显⽰了此 SELECT 语句的输出。
(表达式)
-12344455
以下查询指定了⼀个货币格式化掩码:
SELECT TO_CHAR(d_int, "$*********.**") FROM tab_numbers;
下表显⽰了此 SELECT 语句的输出。
(表达式)
$12344455.00
SELECT TO_CHAR(d_int, "-$*********.**") FROM tab_numbers;
查询返回 - $12344455.00 。
SELECT TO_CHAR(12344455,"-$*********.**") FROM tab_numbers;
下表显⽰了此 SELECT 语句的输出。
(常量)
$12344455.00
应⽤了格式化掩码参数中的货币符号($ ),但是减号(- )不起作⽤,因为第⼀个参数的值⼤于零。
请注意,仅当 TO_CHAR 函数的第⼀个参数是 DATE 或 DATETIME 表达式时,该函数才是时间表达式。当其第⼀个参数是数值或货币值,TO_CHAR 返回此参数值的字符串形式,但它不返回时间表达式。
TO_DATE 函数(IDS)
TO_DATE 函数将字符串转换成 DATETIME 值。这个函数根据 format_string 参数指定的格式,把char_expression 参数评估为⽇期,并返回等价的⽇期值。如果 char_expression 为 NULL,那么将返回 NULL 值。
TO_DATE 函数的任何参数必须是内置数据类型。
如果省略 format_string 参数,那么 TO_DATE 函数会对 DATETIME 值应⽤缺省 DATETIME 格式。缺省 DATETIME 格式由
GL_DATETIME 环境变量指定。
在以下⽰例中,⽤户想要将字符串转换成 DATETIME 值,以便使⽤转换⽽来的值更新 tab1 表的 begin_date 列。begin_date 列定义为DATETIME YEAR TO SECOND 数据类型。⽤户使⽤包含TO_DATE 函数的 UPDAE 语句来完成此结果:
UPDATE tab1 SET begin_date = TO_DATE ('Wednesday July 25, 2007 18:45', '%A %B %d, %Y %R');
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论