转换函数
您可以使用Netezza Performance ServerSQL 格式化函数将数据类型(日期/时间、整数、浮点数、数值)转换为格式化字符串,并将格式化字符串转换为特定数据类型。
to_*函数都使用一个共同的调用约定:第一个参数是要格式化的值,第二个参数是定义输出或输入格式的模板。 这些模板使用的模式在日期/时间转换模板模式中有所描述。
注意:to_char 类型在内部将 "
date数据类型转换为 "timestamp数据类型。下表介绍了转换功能。
| 类型 | 描述 | 示例 |
|---|---|---|
hex_to_binary(VARCHAR) |
将十六进制字符编码字符串转换为等效的二进制字符串。 它返回一个 VARBINARY 值。 | |
hex_to_geometry(VARCHAR) |
将十六进制字符编码字符串转换为等效的 ST_GEOMETRY 值。 | |
int_to_string(INT8, byteint) |
将十进制值转换为十六进制、八进制、十进制或二进制字符串。 函数返回一个 VARCHAR 值。 第一个参数指定要转换的十进制值,第二个参数指定要转换的数制基数。
|
|
string_to_int(VARCHAR, byteint) |
将十六进制、八进制、十进制或二进制字符串转换为十进制值。 函数返回一个INT8值。 第一个参数指定要转换的字符串,第二个参数指定第一个参数的数制基数。
|
|
to_char(value,template) |
将指定值(可以是日期、时间戳、实数、双精度或数值)转换为字符串。
|
见表 2。 |
to_number(text,template) |
将字符串转换为数值。 | select to_number('12,454.8-', '99G999D9S');返回: |
to_date(text,template) |
将字符串转换为日期。 跳过多个空格,除非将 FX 前缀指定为模板中的第一个项目。 | select to_date('31 Dec 2015','DD Mon YYYY');返回: |
select to_date('31 Dec 2015','FXDD Mon
YYYY');返回: |
||
select to_date('31 Dec 2015 20:33:33','DD
Mon YYYY HH24":"MI":"SS');返回: |
||
to_timestamp(text,template) |
将字符串转换为时间戳。 跳过多个空格,除非将 FX 前缀指定为模板中的第一个项目。 | select to_timestamp('31 Dec 2015 08:38:40 pm', 'DD
Mon YYYY HH:MI:SS am');返回: 请注意,模板的子午线指示符(上午或下午)不必与输入字符串的子午线指示符一致。 不过,必须使用相同的格式(带或不带句号)。 |
to_char 函数示例
包含下表所示表达式之一的 SELECT 语句会返回指定结果。
| 表达式 | 结果 | 注释 |
|---|---|---|
to_char(date '2015-02-14', 'YYYY Month') |
'2013 February ' |
在 "2 月 "后面有一个尾部空白,因为 9 个字符("9 月 "中的字母数)是为月份名称保留的,不管实际需要多少个字符。 |
to_char(date '2015-02-14', 'YYYY FMMonth') |
'2013 February' |
FM前缀去掉了 "2 月 "后面的空白。 |
to_char(timestamp '2015-02-14 20:19:07',
'HH24:MI:SS') |
'20:19:07' |
|
to_char(timestamp '2015-02-14 20:19:07',
'HH:MI:SS am') |
'08:19:07 pm' |
模板指定的子午线指标将在输出中调整为与小时相对应(0-12 小时为上午,12-23 小时为下午)。 输出时使用模板指定的子午线指示符格式(大写或小写,带或不带句号)。 |
to_char(timestamp '2015-02-14 20:19:07',
'Day, DD HH:MI:SS am') |
|
在 "Monday "后面有三个空格,因为一周中的某一天的名称要保留 9 个字符(即 "Wednesday "中的字母数),而不管实际需要多少个字符。 |
to_char(timestamp '2015-02-14 20:19:07',
'FMDay, DD HH:MI:SS am') |
|
FM前缀去掉了 "Monday "后面的空白。 它还会去掉日期、小时和秒钟中的前导零。 |
to_char(timestamp '2015-02-14 20:19:07',
'Day, DD FMHH:MI:SS am') |
|
FM前缀去掉了小时和秒前导零。 |
to_char(125, '999') |
' 125' |
结果是一个由 4 个字符组成的字符串,模板中的每个位置一个字符,加上数字前的空白,以代替加号(+)。 |
to_char(-125, '999') |
'-125' |
由于使用了减号(-),所以数字前面没有空白。 |
to_char(125, '"999D999') |
' 125.000' |
该模板指定输出包含三位小数。 结果是一个由 8 个字符组成的字符串,模板中的每个位置一个字符(小数分隔符也算作模板中的一个位置),加上数字前的空白,以代替加号(+)。 |
to_char(-125, '"The number is "999"."') |
'The number is -125.' |
双引号中的文本将被通过。 |
to_char(125, '"The number is "FM999"."') |
The number is 125. |
FM前缀抑制了正数前通常会出现的额外空白。 |
to_char(12.7, '99.9') |
' 12.7' |
结果是一个由 5 个字符组成的字符串,模板中的每个位置一个字符,加上数字前的空格,以代替加号(+)。 |
to_char(12.7, 'FM99.9') |
'12.7' |
FM前缀抑制了正数前通常会出现的额外空白。 |
to_char(0.1, '999.99') |
|
结果是一个由 7 个字符组成的字符串,模板中的每个位置一个字符。 (小数点在模板中也算一个数位) |
to_char(-0.1, '999.99') |
|
结果是一个由 7 个字符组成的字符串,模板中的每个位置一个字符。 (小数点在模板中也算一个数位) |
to_char(-0.1, 'FM999.99') |
'-.1' |
FM前缀抑制了前面的空白和后面的零。 |
to_char(.1, '0.9') |
' 0.1' |
模板中的 "0 "表示要添加的前导零数量与模板中未使用的位置相同。 0 算作模板中的一个位置。 |
to_char(-12.7, '0999.9') |
'-0012.7' |
模板中的 "0 "表示要添加的前导零数量与模板中未使用的位置相同。 0 算作模板中的一个位置。 |
to_char(12.7, '90999.9') |
|
结果是一个由 8 个字符组成的字符串,模板中的每个位置一个字符,加上数字前的空白,以代替加号(+)。 |
to_char(-12.7, '9999999') |
|
结果是一个由 8 个字符组成的字符串,模板中的每个位置一个字符,另外还有一个表示减号 (-) 的字符。 |
to_char(485, '9 9 9') |
' 4 8 5' |
|
to_char(1485, '9,999') |
' 1,485' |
|
to_char(1485, '9G999') |
' 1,485' |
G模式代表您所在地区指定的组分隔符。 |
to_char(148.5, '999.999') |
' 148.500' |
|
to_char(148.5, 'FM999.999') |
'148.5' |
|
to_char(148.5, 'FM999.990') |
'148.500' |
|
to_char(148.5, '999D999') |
' 148.500' |
使用哪种十进制分隔符取决于您的地区。 |
to_char(3148.5, '9G999D999') |
' 3,148.500' |
G模式代表您所在地区指定的组分隔符。 |
to_char(125,'S999') |
'+125' |
数字前面没有空格,因为 "S模式指定输出中始终包含符号。 |
to_char(125, '999S') |
'125+' |
数字前面没有空格,因为 "S模式指定输出中始终包含符号。 |
to_char(-485, '999S') |
'485-' |
|
to_char(-485, 'MI999') |
'-485' |
对于负数,"MI模式会在相应的位置加上减号(-)。 |
to_char(-485, '999MI') |
'485-' |
|
to_char(485, 'MI999') |
' 485' |
对于正数,"MI模式会在相应的位置放置空白。 MI模式不影响正数前面的前导空格。 |
to_char(485, '999MI') |
' 485 ' |
|
to_char(485, 'FM999MI') |
'485 ' |
FM前缀抑制了正数前通常会出现的额外空白,但不影响 "MI后缀添加的尾部空白。 |
to_char(485, 'PL999') |
'+485' |
对于正数,"PL模式会在相应的位置放置加号(+)。 |
to_char(485, '999PL') |
'485+' |
|
to_char(-485, '999PL') |
'-485 ' |
对于负数,"PL模式会在相应的位置放置空白。 后缀 "PL不会影响负数前的减号 (-)。 |
to_char(-485, 'PL999') |
' -485 ' |
|
to_char(-3485, 'SG9999') |
'-3485' |
|
to_char(-3485, 'S9G999') |
'-3,485' |
|
to_char(-3485, '99SG99') |
'34-85' |
|
to_char(-485, '999PR') |
'<485>' |
|
to_char(485, '999PR') |
' 485' |
|
to_char(485, 'FM999PR') |
'485' |
FM前缀抑制了正数前通常会出现的额外空白。 |
to_char(485, 'RN') |
'CDLXXXV' |
|
to_char(5.2, 'RN') |
'V' |
罗马数字忽略十进制分数。 |
to_char(482, '999th') |
' 482nd' |
后缀 "th会产生相应的序数后缀(st、nd、rd 或 th)。 |
to_char(485.8, '"Pre: "FM999" Post:" .999') |
'Pre: 485 Post: .800' |
FM前缀抑制了正数前通常会出现的额外空白。 |
to_char(485.8, '"Pre: "FM999" Post:" .999') |
'Pre: -485 Post: .800' |
FM前缀不影响负数。 |
to_char(12, '99V999') |
' 12000' |
|
to_char(12.4, '99V999') |
' 12400' |
|
to_char(12.45, '99V9') |
' 125' |