informix中的to_date
和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 环境变量设置货币符号。当您将几个美元符号组织在一行中时,一个美元符号将浮动到它能占据的最右边的位置;它不影响该数字及其货币符号。
格式化掩码中的其他任何字符在 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');