转换函数

您可以使用Netezza Performance ServerSQL 格式化函数将数据类型(日期/时间、整数、浮点数、数值)转换为格式化字符串,并将格式化字符串转换为特定数据类型。

to_*函数都使用一个共同的调用约定:第一个参数是要格式化的值,第二个参数是定义输出或输入格式的模板。 这些模板使用的模式在日期/时间转换模板模式中有所描述。

注意:to_char 类型在内部将 "date数据类型转换为 "timestamp数据类型。
下表介绍了转换功能。
表 1. 转换函数
类型 描述 示例
hex_to_binary(VARCHAR) 将十六进制字符编码字符串转换为等效的二进制字符串。 它返回一个 VARBINARY 值。  
hex_to_geometry(VARCHAR) 将十六进制字符编码字符串转换为等效的 ST_GEOMETRY 值。  
int_to_string(INT8, byteint) 将十进制值转换为十六进制、八进制、十进制或二进制字符串。 函数返回一个 VARCHAR 值。 第一个参数指定要转换的十进制值,第二个参数指定要转换的数制基数。
  • 基 2 = 二进制
  • 基 8 = 八进制
  • 基数 10 = 小数
  • 基 16 = 十六进制
 
string_to_int(VARCHAR, byteint) 将十六进制、八进制、十进制或二进制字符串转换为十进制值。 函数返回一个INT8值。 第一个参数指定要转换的字符串,第二个参数指定第一个参数的数制基数。
  • 基 2 = 二进制
  • 基 8 = 八进制
  • 基数 10 = 小数
  • 基 16 = 十六进制
 
to_char(value,template) 将指定值(可以是日期、时间戳、实数、双精度或数值)转换为字符串。
  • 在模板中,用双引号括起来的文本将被传递。
  • 要输出双引号,请在双引号前加上反斜杠。
  • 将正数转换为字符时,该函数会插入一个前导空格,这样正负值的长度就相等了。 要抑制前导空白,请使用 FM 前缀选项。
见表 2
to_number(text,template) 将字符串转换为数值。 select to_number('12,454.8-', '99G999D9S');

返回: -12454.8

to_date(text,template) 将字符串转换为日期。 跳过多个空格,除非将 FX 前缀指定为模板中的第一个项目。 select to_date('31 Dec 2015','DD Mon YYYY');

返回: 2015-12-31

select to_date('31 Dec 2015','FXDD Mon YYYY');

返回: 2015-12-31

select to_date('31 Dec 2015 20:33:33','DD Mon YYYY HH24":"MI":"SS');

返回: 2015-12-31

to_timestamp(text,template) 将字符串转换为时间戳。 跳过多个空格,除非将 FX 前缀指定为模板中的第一个项目。 select to_timestamp('31 Dec 2015 08:38:40 pm', 'DD Mon YYYY HH:MI:SS am');

返回: 2015-12-31 20:38:40

请注意,模板的子午线指示符(上午或下午)不必与输入字符串的子午线指示符一致。 不过,必须使用相同的格式(带或不带句号)。

to_char 函数示例

包含下表所示表达式之一的 SELECT 语句会返回指定结果。

表 2. to_char 函数示例
表达式 结果 注释
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   , 04 08:19:07 pm'
在 "Monday "后面有三个空格,因为一周中的某一天的名称要保留 9 个字符(即 "Wednesday "中的字母数),而不管实际需要多少个字符。
to_char(timestamp '2015-02-14 20:19:07', 'FMDay, DD  HH:MI:SS am')
'Monday, 4 8:19:7 pm'
FM前缀去掉了 "Monday "后面的空白。 它还会去掉日期、小时和秒钟中的前导零。
to_char(timestamp '2015-02-14 20:19:07', 'Day, DD  FMHH:MI:SS am')
'Monday   , 04 8:19:7 pm'
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')
'    .10'
结果是一个由 7 个字符组成的字符串,模板中的每个位置一个字符。 (小数点在模板中也算一个数位)
to_char(-0.1, '999.99')
'   -.10'
结果是一个由 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')
'  0012.7'
结果是一个由 8 个字符组成的字符串,模板中的每个位置一个字符,加上数字前的空白,以代替加号(+)。
to_char(-12.7, '9999999')
'     -13'
结果是一个由 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'