TO_CHAR 函数将expr的值按 format 格式转换为 CHAR/VARCHAR 类型字符串数据。
YashanDB 支持将所有普通类型的数据转换为 CHAR/VARCHAR 类型的数据:
根据支持类型可将 TO_CHAR 函数分为如下三类:
TO_CHAR(日期时间型)、TO_CHAR(日期时间型,FORMAT):expr 的值为日期时间型时,支持携带格式符;此时函数返回 VARCHAR 类型字符串数据。
TO_CHAR(数值型)、TO_CHAR(数值型,FORMAT):expr 的值为数值型时,支持携带格式符;此时函数返回 VARCHAR 类型字符串数据。
TO_CHAR(非日期/数值的其他类型):expr 的值为字符型并且携带格式符时,expr 尝试往 NUMBER 类型转换,转换成功则按照 TO_CHAR(数值型,FORMAT)执行,转换失败则函数返回转换报错。不携带格式符时,当 expr 的值 CHAR 类型,函数返回 CHAR 类型字符串数据,否则返回 VARCHAR 类型字符串数据。
当 expr 的值为 NULL 时,函数返回 NULL。
expr 支持 LOB 类型隐式转换,但不支持 32000 字节以上的 XMLTYPE、LOB 类型数据。
使用本函数时,expr 的值超过 NUMBER 类型的表示范围时,本函数会返回数据溢出错误。
format
指定转换的格式。
format 支持中文年月日,须用双引号包围中文字符,expr 中的中文字符无须用双引号包围。
日期时间型数据的格式支持以下字符的组合:
年年份:'YYYY'、'YYY'、'YY'、'Y'、'RRRR'、'RR'由 ISO 标准定义下的年份: 'IYYY'、'IYY'、'IY'、'I'一年中的一天(1-366):'DDD'一年中的一周(1-53):'WW'由 ISO 标准定义下一年中的一周(1-53):'IW'世纪:'CC'
月月份数字:'MM'月份全称:'MONTH'月份缩写:'MON'
季度季度(1-4):'Q'
日日期数字:'DD'
周一个月中的一周(1-5):'W'一周中的一天全称(SUNDAY-SATURDAY):'DAY'一周中的一天数字(1-7):'D'
时 24 小时制小时:'HH24'12 小时制小时:'HH'、'HH12'12 小时制时段:'AM'、'PM'、'A.M.'、'P.M.'
分分钟数:'MI'
秒秒数:'SS'一天的总秒数:'SSSSS'
儒略日(不支持向量化计算)儒略日计数:J
儒略日计数英文全拼:JSP
连接字符:':', '-', '/', '.', ',', ';', '\', '_', ' ', '[', ']'
(以下格式符列存表暂不支持)
Note:
数值型数据的格式支持以下字符的组合:
小数点:.
,如'99.99'
美元符号:$
,如'$9,999'
强迫零显示:0
,如'00000'
指定位置返回数字:9
,如'9999'
指定位置返回小数点:D
,如'99D99'
设首位或末尾为-或+:S
,如'S9999'
千位分隔符:,
,如'9,999'
在指定位置返回千位分隔符:G
,如'9G9'
(以下为列存表专用格式)
当整数部分为零时,返回定点数字整数部分的空格:B
,如'B99'
在指定位置返回货币符号:C
,如'C99'
以科学计数法的形式返回数字:EEEE
,如'9EEEE'
在指定位置显示货币符号:L
,如'L99''
负值末尾填充负号,正值末尾填充空格:MI
,如'9MI'
负值放在<>中,正值首尾填充空格:PR
,如'9PR'
返回大写罗马数字形式:RN
,如'RN'
返回小写罗马数字形式:rn
,如'rn'
以最少的字符数返回十进制数字字符串:TM
,如'TM'
在指定位置返回欧元等货币符号:U
,如'U99'
返回 10n值,其中 n 是 V 后面的数字:V
,如'99V99'
返回指定数字的十六进制值:X
,如'XXX'
去掉前后空格和小数后面多余的 0:FM
,如'FM999'
当 expr 的值为布尔型的数据时,不需要指定 format 格式,指定会报错。
示例
SELECT TO_CHAR('深圳') res1,TO_CHAR(True) res2 FROM DUAL;
RES1 RES2
--------- -----
深圳 true
复制代码
Copied!
当 expr 的值为日期时间型的数据时,不指定 format 表示系统对该日期类型指定的默认格式转换。
示例
SELECT TO_CHAR(SYSTIMESTAMP+1) res FROM DUAL;
RES
----------------------------------------------------------------
2022-01-10 22:09:27
SELECT TO_CHAR(SYSDATE,'YYYYMMDD HH24:MI:SS') res FROM DUAL;
RES
----------------------------------------------------------------
20220109 22:09:27
SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"dd"日"') RES FROM DUAL;
RES
--------------------------------
2023年11月09日
复制代码
Copied!
当 expr 的值为数值型的数据时,不指定 format 表示按该数据的字面值转换为字符串。
示例(HEAP 表)
SELECT TO_CHAR(numbera,'00000') n1,
TO_CHAR(numberb,'99.99') n2,
TO_CHAR(numberc,'$99999999') n3,
TO_CHAR(numberd,'9999999999999999999') n4,
TO_CHAR(numbere,'99D99') n5,
TO_CHAR(numberf) n6,
TO_CHAR(numberg,'9999999999S') n7,
TO_CHAR(numberh) n8
FROM numbers;
N1 N2 N3 N4 N5 N6 N7 N8
------- ------- ---------- --------------------- --------- -------------------------- --------- ----
-00005 55.00 $5555 5555555555555555555 5.55 -5.5555555500000002E+000 555+ 1
复制代码
Copied!
示例(TAC、LSC 表)
SELECT TO_CHAR(numbera,'00000') n1,
TO_CHAR(numberb,'99.99') n2,
TO_CHAR(numberc,'$99999999') n3,
TO_CHAR(numberd,'9999999999999999999') n4,
TO_CHAR(numbere,'99D99') n5,
TO_CHAR(numberf) n6,
TO_CHAR(numberg,'9999999999S') n7
FROM numbers_nobit;
N1 N2 N3 N4 N5 N6 N7
--------- --------- ------------- --------------------- --------- --------------------------------------------- -------------
-00005 55.00 $5555 5555555555555555555 5.55 5.5555555555499998E+000 555+
复制代码
Copied!
当 expr 的值为字符型的数据时,不指定 format 表示按该数据的字面值转换为字符串。
示例(HEAP 表)
SELECT TO_CHAR(CAST(numbera AS VARCHAR(30)),'00000') n1,
TO_CHAR(CAST(numberb AS VARCHAR(30)),'99.99') n2,
TO_CHAR(CAST(numberc AS VARCHAR(30)),'$99999999') n3,
TO_CHAR(CAST(numberd AS VARCHAR(30)),'9999999999999999999') n4,
TO_CHAR(CAST(numbere AS VARCHAR(30)),'99D99') n5,
TO_CHAR(CAST(numberf AS VARCHAR(30))) n6,
TO_CHAR(CAST(numberg AS VARCHAR(30)),'9999999999S') n7,
TO_CHAR(CAST(numberh AS VARCHAR(30))) n8
FROM numbers;
N1 N2 N3 N4 N5 N6 N7 N8
--------- --------- ------------- --------------------- --------- --------------------------------- ------------- ---------------------------------
-00005 55.00 $5555 5555555555555555555 5.55 -5.5555555500000002E+000 555+ 1
复制代码
Copied!
示例(TAC、LSC 表)
SELECT TO_CHAR(CAST(numbera AS VARCHAR(30)),'00000') n1,
TO_CHAR(CAST(numberb AS VARCHAR(30)),'99.99') n2,
TO_CHAR(CAST(numberc AS VARCHAR(30)),'$99999999') n3,
TO_CHAR(CAST(numberd AS VARCHAR(30)),'9999999999999999999') n4,
TO_CHAR(CAST(numbere AS VARCHAR(30)),'99D99') n5,
TO_CHAR(CAST(numberf AS VARCHAR(30))) n6,
TO_CHAR(CAST(numberg AS VARCHAR(30)),'9999999999S') n7
FROM numbers_nobit;
N1 N2 N3 N4 N5 N6 N7
--------- --------- ------------- --------------------- --------- --------------------------------- -------------
-00005 55.00 $5555 5555555555555555555 5.55 5.5555555555499998E+000 555+
复制代码
代码
to_char::= TO_CHAR "(" expr ["," format] ")"
复制代码
TO_CHAR 函数将expr的值按 format 格式转换为 CHAR/VARCHAR 类型字符串数据。
YashanDB 支持将所有普通类型的数据转换为 CHAR/VARCHAR 类型的数据:
根据支持类型可将 TO_CHAR 函数分为如下三类:
TO_CHAR(日期时间型)、TO_CHAR(日期时间型,FORMAT):expr 的值为日期时间型时,支持携带格式符;此时函数返回 VARCHAR 类型字符串数据。
TO_CHAR(数值型)、TO_CHAR(数值型,FORMAT):expr 的值为数值型时,支持携带格式符;此时函数返回 VARCHAR 类型字符串数据。
TO_CHAR(非日期/数值的其他类型):expr 的值为字符型并且携带格式符时,expr 尝试往 NUMBER 类型转换,转换成功则按照 TO_CHAR(数值型,FORMAT)执行,转换失败则函数返回转换报错。不携带格式符时,当 expr 的值 CHAR 类型,函数返回 CHAR 类型字符串数据,否则返回 VARCHAR 类型字符串数据。
当 expr 的值为 NULL 时,函数返回 NULL。
expr 支持 LOB 类型隐式转换,但不支持 32000 字节以上的 XMLTYPE、LOB 类型数据。
使用本函数时,expr 的值超过 NUMBER 类型的表示范围时,本函数会返回数据溢出错误。
format
指定转换的格式。
format 支持中文年月日,须用双引号包围中文字符,expr 中的中文字符无须用双引号包围。
日期时间型数据的格式支持以下字符的组合:
年年份:'YYYY'、'YYY'、'YY'、'Y'、'RRRR'、'RR'由 ISO 标准定义下的年份: 'IYYY'、'IYY'、'IY'、'I'一年中的一天(1-366):'DDD'一年中的一周(1-53):'WW'由 ISO 标准定义下一年中的一周(1-53):'IW'世纪:'CC'
月月份数字:'MM'月份全称:'MONTH'月份缩写:'MON'
季度季度(1-4):'Q'
日日期数字:'DD'
周一个月中的一周(1-5):'W'一周中的一天全称(SUNDAY-SATURDAY):'DAY'一周中的一天数字(1-7):'D'
时 24 小时制小时:'HH24'12 小时制小时:'HH'、'HH12'12 小时制时段:'AM'、'PM'、'A.M.'、'P.M.'
分分钟数:'MI'
秒秒数:'SS'一天的总秒数:'SSSSS'
儒略日(不支持向量化计算)儒略日计数:J
儒略日计数英文全拼:JSP
连接字符:':', '-', '/', '.', ',', ';', '\', '_', ' ', '[', ']'
(以下格式符列存表暂不支持)
Note:
数值型数据的格式支持以下字符的组合:
小数点:.
,如'99.99'
美元符号:$
,如'$9,999'
强迫零显示:0
,如'00000'
指定位置返回数字:9
,如'9999'
指定位置返回小数点:D
,如'99D99'
设首位或末尾为-或+:S
,如'S9999'
千位分隔符:,
,如'9,999'
在指定位置返回千位分隔符:G
,如'9G9'
(以下为列存表专用格式)
当整数部分为零时,返回定点数字整数部分的空格:B
,如'B99'
在指定位置返回货币符号:C
,如'C99'
以科学计数法的形式返回数字:EEEE
,如'9EEEE'
在指定位置显示货币符号:L
,如'L99''
负值末尾填充负号,正值末尾填充空格:MI
,如'9MI'
负值放在<>中,正值首尾填充空格:PR
,如'9PR'
返回大写罗马数字形式:RN
,如'RN'
返回小写罗马数字形式:rn
,如'rn'
以最少的字符数返回十进制数字字符串:TM
,如'TM'
在指定位置返回欧元等货币符号:U
,如'U99'
返回 10n值,其中 n 是 V 后面的数字:V
,如'99V99'
返回指定数字的十六进制值:X
,如'XXX'
去掉前后空格和小数后面多余的 0:FM
,如'FM999'
当 expr 的值为布尔型的数据时,不需要指定 format 格式,指定会报错。
示例
SELECT TO_CHAR('深圳') res1,TO_CHAR(True) res2 FROM DUAL;
RES1 RES2
--------- -----
深圳 true
复制代码
Copied!
当 expr 的值为日期时间型的数据时,不指定 format 表示系统对该日期类型指定的默认格式转换。
示例
SELECT TO_CHAR(SYSTIMESTAMP+1) res FROM DUAL;
RES
----------------------------------------------------------------
2022-01-10 22:09:27
SELECT TO_CHAR(SYSDATE,'YYYYMMDD HH24:MI:SS') res FROM DUAL;
RES
----------------------------------------------------------------
20220109 22:09:27
SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"dd"日"') RES FROM DUAL;
RES
--------------------------------
2023年11月09日
复制代码
Copied!
当 expr 的值为数值型的数据时,不指定 format 表示按该数据的字面值转换为字符串。
示例(HEAP 表)
SELECT TO_CHAR(numbera,'00000') n1,
TO_CHAR(numberb,'99.99') n2,
TO_CHAR(numberc,'$99999999') n3,
TO_CHAR(numberd,'9999999999999999999') n4,
TO_CHAR(numbere,'99D99') n5,
TO_CHAR(numberf) n6,
TO_CHAR(numberg,'9999999999S') n7,
TO_CHAR(numberh) n8
FROM numbers;
N1 N2 N3 N4 N5 N6 N7 N8
------- ------- ---------- --------------------- --------- -------------------------- --------- ----
-00005 55.00 $5555 5555555555555555555 5.55 -5.5555555500000002E+000 555+ 1
复制代码
Copied!
示例(TAC、LSC 表)
SELECT TO_CHAR(numbera,'00000') n1,
TO_CHAR(numberb,'99.99') n2,
TO_CHAR(numberc,'$99999999') n3,
TO_CHAR(numberd,'9999999999999999999') n4,
TO_CHAR(numbere,'99D99') n5,
TO_CHAR(numberf) n6,
TO_CHAR(numberg,'9999999999S') n7
FROM numbers_nobit;
N1 N2 N3 N4 N5 N6 N7
--------- --------- ------------- --------------------- --------- --------------------------------------------- -------------
-00005 55.00 $5555 5555555555555555555 5.55 5.5555555555499998E+000 555+
复制代码
Copied!
当 expr 的值为字符型的数据时,不指定 format 表示按该数据的字面值转换为字符串。
示例(HEAP 表)
SELECT TO_CHAR(CAST(numbera AS VARCHAR(30)),'00000') n1,
TO_CHAR(CAST(numberb AS VARCHAR(30)),'99.99') n2,
TO_CHAR(CAST(numberc AS VARCHAR(30)),'$99999999') n3,
TO_CHAR(CAST(numberd AS VARCHAR(30)),'9999999999999999999') n4,
TO_CHAR(CAST(numbere AS VARCHAR(30)),'99D99') n5,
TO_CHAR(CAST(numberf AS VARCHAR(30))) n6,
TO_CHAR(CAST(numberg AS VARCHAR(30)),'9999999999S') n7,
TO_CHAR(CAST(numberh AS VARCHAR(30))) n8
FROM numbers;
N1 N2 N3 N4 N5 N6 N7 N8
--------- --------- ------------- --------------------- --------- --------------------------------- ------------- ---------------------------------
-00005 55.00 $5555 5555555555555555555 5.55 -5.5555555500000002E+000 555+ 1
复制代码
Copied!
示例(TAC、LSC 表)
SELECT TO_CHAR(CAST(numbera AS VARCHAR(30)),'00000') n1,
TO_CHAR(CAST(numberb AS VARCHAR(30)),'99.99') n2,
TO_CHAR(CAST(numberc AS VARCHAR(30)),'$99999999') n3,
TO_CHAR(CAST(numberd AS VARCHAR(30)),'9999999999999999999') n4,
TO_CHAR(CAST(numbere AS VARCHAR(30)),'99D99') n5,
TO_CHAR(CAST(numberf AS VARCHAR(30))) n6,
TO_CHAR(CAST(numberg AS VARCHAR(30)),'9999999999S') n7
FROM numbers_nobit;
N1 N2 N3 N4 N5 N6 N7
--------- --------- ------------- --------------------- --------- --------------------------------- -------------
-00005 55.00 $5555 5555555555555555555 5.55 5.5555555555499998E+000 555+
复制代码
评论