#TO_CHAR
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不支持BOOL类型。
当expr的值为NULL时,函数返回NULL。
expr不支持32000字节以上的LOB类型数据。
于行存表中使用本函数时,如果expr是BINARY_DOUBLE类型,且其值超过NUMBER类型的表示范围时,本函数会返回数据溢出错误。
format
指定转换的格式。
日期型数据的格式支持以下字符的组合:
- 年
- 年份:'YYYY'、'Y'、'YY'、'YYY'
- 一年中的一天(1-366):'DDD'
- 一年中的一周(1-53):'WW'
- 月
- 月份数字:'MM'
- 月份全称:'MONTH'
- 月份缩写:'MON'
- 日
- 日期数字:'DD'
- 周
- 一个月中的一周(1-5):'W'
- 一周中的一天全称(SUNDAY-SATURDAY):'DAY'
- 一周中的一天数字(1-7):'D'
- 时
- 24小时制小时:'HH24'
- 12小时制小时:'HH'、'HH12'
- 分
- 分钟数:'MI'
- 秒
- 秒数:'SS'
- 连接字符:':', '-', '/', '.', ',', ';', '\', '_', ' '
- ':', '-', '/', '.', ',', ';', '\', '_':八种连接符相互一对一兼容匹配
- ' ':忽略所有空格,空格不参与匹配
数值型数据的格式支持以下字符的组合:
- 小数点:
.
,如'99.99' - 美元符号:
$
,如'$9,999' - 强迫零显示:
0
,如'00000' - 指定位置返回数字:
9
,如'9999' - 指定位置返回小数点:
D
,如'99D99' - 设首位或末尾为-或+:
S
,如'S9999' (以下为列存表专用格式) - 千位分隔符:
,
,如'9,999' - 当整数部分为零时,返回定点数字整数部分的空格:
B
,如'B99' - 在指定位置返回货币符号:
C
,如'C99' - 以科学计数法的形式返回数字:
EEEE
,如'9EEEE' - 在指定位置返回千位分隔符:
G
,如'9G9' - 在指定位置显示货币符号:
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
当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
当expr的值为数值型的数据时,不指定format表示按该数据的字面值转换为字符串。
示例
--行存表
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
--列存表
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.5555555500000002E+000 555+
当expr的值为字符型的数据时,不指定format表示按该数据的字面值转换为字符串。
示例
SELECT TO_CHAR(chara,'00000') n1,
TO_CHAR(charb,'99.99') n2,
TO_CHAR(charc,'$99999999') n3,
TO_CHAR(chard,'9999999999999999999') n4,
TO_CHAR(chare,'99D99') n5,
TO_CHAR(charf) n6,
TO_CHAR(charg,'9999999999S') n7,
FROM chars;
N1 N2 N3 N4 N5 N6 N7
------- ------- ---------- --------------------- --------- -------------------------- ---------
55555 55.00 $55555 5555555555 55.00 555 5+