金仓数据库 KingbaseES参考手册 (8. 函数(十))

8.381. TABLE_TO_XML

用法:

table_to_xml(tbl regclass, nulls boolean, tableforest boolean, targetns text)

功能:

table_to_xml映射由参数tbl传递的命名表的内容。regclass类型接受使用常见标记标识表的字符串,包括可选的模式限定和双引号。

例子:

如果tableforest为假,则结果的 XML 文档看起来像这样:

<tablename>

  <row>

    <columnname1>data</columnname1>

    <columnname2>data</columnname2>

  </row>

  <row>

   ...

  </row>

...

</tablename>

如果tableforest为真,结果是一个看起来像这样的 XML 内容片断:

<tablename>

  <columnname1>data</columnname1>

  <columnname2>data</columnname2>

</tablename>

<tablename>

...

</tablename>

8.382. TAN

用法:

../../../_images/TAN1.png

目的:TAN返回(以弧度表示的角度) n的正切。

此函数将任何数值数据类型或任何可以隐式转换为数值数据类型的非数值数据类型作为参数。如果参数是BINARY_FLOAT,则函数返回BINARY_DOUBLE。否则,函数返回与参数相同的数值数据类型。

例子:以下示例返回 135 度的切线:

SELECT TAN(135 * 3.14159265359/180) "Tangent of 135 degrees" FROM DUAL;

Tangent of 135 degrees

  • 1

8.383. TANH

用法:

../../../_images/TANH1.png

目的:TANH返回n的双曲正切。

此函数将任何数值数据类型或任何可以隐式转换为数值数据类型的非数值数据类型作为参数。如果参数是BINARY_FLOAT,则函数返回BINARY_DOUBLE。否则,函数返回与参数相同的数值数据类型。

例子:以下示例返回 0.5 的双曲正切:

SELECT TANH(.5) "Hyperbolic tangent of .5" FROM DUAL;

Hyperbolic tangent of .5

.462117157

8.384. TIMEOFDAY

用法:

TIMEOFDAY()

输出:

返回当时服务器时间。

功能:

返回当时服务器时间。

例子:

select timeofday();
      timeofday
-------------------------------------
Tue Jun 28 19:51:06.984914 2022 CST
(1 row)

8.385. TIMESUB

用法:

TIMESUB(head, tail)

输入参数:

head:起始时间,类型timestamp。 tail: 终止时间,类型timestamp。

输出:

返回head和tail的时间差,返回float类型。

功能:

返回head和tail的时间差。单位为秒。

例子:

select timesub('2017-2-28 23:59:1'::timestamptz, '2017-3-1 1:1:1'::timestamptz);
timesub
---------
  3720
(1 row)

8.386. TO_ASCII

用法:

to_ascii(string text [, encoding text])

功能:

to_ascii(string text [, encoding text]) 将string从另一个编码转换到ASCII(只支持从LATIN1、 LATIN2、LATIN9和WIN1250 编码的转换)

例子:

SELECT to_ascii('Karel');

8.387. TO_CHAR

8.387.1. TO_CHAR(bfile|blob)

用法

to_char_bfile_blob:

../../../_images/ToCharBfileBlob1.png

目的:TO_CHAR(bfile|blob) 将数据BFILE或BLOB数据转换为数据库字符集。返回的值始终是VARCHAR。如果返回的值太大而无法适应VARCHAR数据类型,则数据将被截断。

对于csid,指定BFILE或者BLOB数据的字符集 ID 。如果BFILE或者BLOB数据的字符集是数据库字符集,则可以为csid 指定值 0 ,或完全省略csid。

例子:下面的假设示例将media_table 中的一个BFILE列media_col列作为其输入,该列使用 ID 为 873 的字符集。该示例返回一个使用数据库字符集VARCHAR的值。

SELECT TO_CHAR(media_col, 873) FROM media_tab;

8.387.2. TO_CHAR(character)

用法:

to_char_char:

../../../_images/ToCharChar1.png

目的:TO_CHAR(character) 将NCHAR、NVARCHAR、CLOB或NCLOB数据转换为数据库字符集。返回的值始终是 VARCHAR。

使用该函数将字符 LOB 转换为数据库字符集时,如果要转换的 LOB 值大于目标类型,则数据库返回错误。

例子:以下示例将简单字符串解释为字符数据:

SELECT TO_CHAR('01110') FROM DUAL;

TO_CH

01110

将此示例与TO_CHAR (number)的第一个示例进行比较。

以下示例将表中的一些CLOB数据转换pm.print_media为数据库字符集:

SELECT TO_CHAR(ad_sourcetext) FROM print_media WHERE product_id = 2268;

TO_CHAR(AD_SOURCETEXT)

TIGER2 2268...标准 Hayes 兼容调制解调器

产品编号:2268

宇宙中销量第一的调制解调器!Tiger2 的调制解调器包括呼叫管理和互联网配音。同时拨打实时全双工电话你在线。

TO_CHAR(字符)功能:示例

以下语句创建一个名为empl_temp并使用员工详细信息填充它的表:

CREATE TABLE empl_temp (employee_id NUMBER(6), first_name VARCHAR(20), last_name VARCHAR(25), email VARCHAR(25), hire_date DATE DEFAULT SYSDATE, job_id VARCHAR(10), clob_column CLOB );

INSERT INTO empl_temp VALUES(111,'John','Doe','example.com','10-JAN-2015','1001','ExperiencedEmployee');

INSERT INTO empl_temp VALUES(112,'John','Smith','example.com','12-JAN-2015','1002','JuniorEmployee');

INSERT INTO empl_temp VALUES(113,'Johnnie','Smith','example.com','12-JAN-2014','1002','Mid-CareerEmployee');

INSERT INTO empl_temp VALUES(115,'Jane','Doe','example.com','15-JAN-2015','1005','ExecutiveEmployee');

以下语句将 CLOB 数据转换为数据库字符集:

SELECT To_char(clob_column) "CLOB_TO_CHAR" FROM empl_temp WHERE employee_id IN ( 111, 112, 115 );

CLOB_TO_CHAR

Experienced Employee

Junior Employee

Executive Employee

8.387.3. TO_CHAR(datetime)

用法:

to_char_date:

../../../_images/ToCharDateTime1.png

目的:TO_CHAR(datetime) 将 DATE,TIMESTAMP,TIMESTAMP WITH TIME ZONE ,TIMESTAMP WITH LOCAL TIME ZONE , INTERVAL DAY TO SECOND或INTERVAL YEAR TO MONTH数据类型转换为VARCHAR数据类型的值,该数据类型的格式由DATE类型的fmt指定,如果省略fmt, date将转换VARCHAR为如下值:

  • DATE值将转换为默认日期格式的值。

  • TIMESTAMP并将TIMESTAMP WITH LOCAL TIME ZONE值转换为默认时间戳格式的值。

  • TIMESTAMP WITH TIME ZONE值将转换为具有时区格式的默认时间戳中的值。

  • 区间值被转换为区间文字的数字表示。

有关日期时间格式的信息,请参阅“格式模型”。

该'nlsparam'参数指定返回月份和日期名称和缩写所使用的语言。这个参数可以有这种形式:

'NLS_DATE_LANGUAGE = language'

如果省略'nlsparam',则此函数使用会话的默认日期语言。

也可以看看:

"数据转换的安全注意事项"

您可以将此函数与任何 XML 函数结合使用,以数据库格式而不是 XML Schema 标准格式生成日期。

也可以看看:

“ XML 函数”用于 XML 函数的列表

例子:以下示例使用此表:

CREATE TABLE date_tab ( ts_col TIMESTAMP, tsltz_col TIMESTAMP WITH LOCAL TIME ZONE, tstz_col TIMESTAMP WITH TIME ZONE);

该示例显示了应用于TO_CHAR不同TIMESTAMP数据类型的结果。列的结果对TIMESTAMP WITH LOCAL TIME ZONE会话时区敏感,而TIMESTAMP和TIMESTAMP WITH TIME ZONE列的结果对会话时区不敏感:

ALTER SESSION SET TIME_ZONE = '-8:00';

INSERT INTO date_tab VALUES ( TIMESTAMP'1999-12-01 10:00:00', TIMESTAMP'1999-12-01 10:00:00', TIMESTAMP'1999-12-01 10:00:00');

INSERT INTO date_tab VALUES ( TIMESTAMP'1999-12-02 10:00:00 -8:00', TIMESTAMP'1999-12-02 10:00:00 -8:00', TIMESTAMP'1999-12-02 10:00:00 -8:00');

SELECT TO_CHAR(ts_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS ts_date, TO_CHAR(tstz_col, 'DD-MON-YYYY HH24:MI:SSxFF TZH:TZM') AS tstz_date FROM date_tab ORDER BY ts_date, tstz_date;

TS_DATE

TSTZ_DATE

01-DEC-1999 10:00:00.000000

01-DEC-1999 10:00:00.000000 -08:00

02-DEC-1999 10:00:00.000000

02-DEC-1999 10:00:00.000000 -08:00

SELECT SESSIONTIMEZONE, TO_CHAR(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS tsltz FROM date_tab ORDER BY sessiontimezone, tsltz;

SESSIONTIM TSLTZ

-08:00

01-DEC-1999 10:00:00.000000

-08:00

02-DEC-1999 10:00:00.000000

ALTER SESSION SET TIME_ZONE = '-5:00';

SELECT TO_CHAR(ts_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS ts_col, TO_CHAR(tstz_col, 'DD-MON-YYYY HH24:MI:SSxFF TZH:TZM') AS tstz_col FROM date_tab ORDER BY ts_col, tstz_col;

TS_COL

TSTZ_COL

01-DEC-1999 10:00:00.000000

01-DEC-1999 10:00:00.000000 -08:00

02-DEC-1999 10:00:00.000000

02-DEC-1999 10:00:00.000000 -08:00

SELECT SESSIONTIMEZONE, TO_CHAR(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS tsltz_col FROM date_tab ORDER BY sessiontimezone, tsltz_col;

SESSIONTIM

TSLTZ_COL

-05:00

01-DEC-1999 13:00:00.000000

-05:00

02-DEC-1999 13:00:00.000000

以下示例将区间文字转换为文本文字:

SELECT TO_CHAR(INTERVAL '123-2' YEAR(3) TO MONTH) FROM DUAL;

TO_CHAR

+123-02

使用 TO_CHAR 格式化日期和数字:示例

以下语句将日期值转换为TO_CHAR函数中指定的格式:

WITH dates AS ( SELECT date'2015-01-01' d FROM dual union SELECT date'2015-01-10' d FROM dual union SELECT date'2015-02-01' d FROM dual ) SELECT d "Original Date", to_char(d, 'dd-mm-yyyy') "Day-Month-Year", to_char(d, 'hh24:mi') "Time in 24-hr format", to_char(d, 'iw-iyyy') "ISO Year and Week of Year" FROM dates;

以下语句将日期和时间戳值转换为TO_CHAR函数中指定的格式:

WITH dates AS ( SELECT date'2015-01-01' d FROM dual union SELECT date'2015-01-10' d FROM dual union SELECT date'2015-02-01' d FROM dual union SELECT timestamp'2015-03-03 23:44:32' d FROM dual union SELECT timestamp'2015-04-11 12:34:56' d FROM dual ) SELECT d "Original Date", to_char(d, 'dd-mm-yyyy') "Day-Month-Year", to_char(d, 'hh24:mi') "Time in 24-hr format", to_char(d, 'iw-iyyy') "ISO Year and Week of Year", to_char(d, 'Month') "Month Name", to_char(d, 'Year') "Year" FROM dates;

以下语句EXTRACT从输入日期时间表达式中提取函数中指定的日期时间字段:

WITH dates AS ( SELECT date'2015-01-01' d FROM dual union SELECT date'2015-01-10' d FROM dual union SELECT date'2015-02-01' d FROM dual union SELECT timestamp'2015-03-03 23:44:32' d FROM dual union SELECT timestamp'2015-04-11 12:34:56' d FROM dual ) SELECT extract(minute from d) minutes, extract(hour from d) hours, extract(day from d) days, extract(month from d) months, extract(year from d) years FROM dates;

以下语句按照TO_CHAR函数中指定的格式显示输入数字:

WITH nums AS ( SELECT 10 n FROM dual union SELECT 9.99 n FROM dual union SELECT 1000000 n FROM dual --one million ) SELECT n "Input Number N", to_char(n), to_char(n, '9,999,999.99') "Number with Commas", to_char(n, '0,000,000.000') "Zero-padded Number", to_char(n, '9.9EEEE') "Scientific Notation" FROM nums;

以下语句根据TO_CHAR函数中指定的格式转换输入数字:

WITH nums AS ( SELECT 10 n FROM dual union SELECT 9.99 n FROM dual union SELECT .99 n FROM dual union SELECT 1000000 n FROM dual --one million ) SELECT n "Input Number N", to_char(n), to_char(n, '9,999,999.99') "Number with Commas", to_char(n, '0,000,000.000') "Zero_padded Number", to_char(n, '9.9EEEE') "Scientific Notation", to_char(n, '$9,999,990.00') Monetary, to_char(n, 'X') "Hexadecimal Value" FROM nums;

以下语句根据TO_CHAR函数中指定的格式转换输入数字:

WITH nums AS ( SELECT 10 n FROM dual union SELECT 9.99 n FROM dual union SELECT .99 n FROM dual union SELECT 1000000 n FROM dual --one million ) SELECT n "Input Number N", to_char(n), to_char(n, '9,999,999.99') "Number with Commas", to_char(n, '0,000,000.000') "Zero_padded Number", to_char(n, '9.9EEEE') "Scientific Notation", to_char(n, '$9,999,990.00') Monetary, to_char(n, 'XXXXXX') "Hexadecimal Value" FROM nums;

实时 SQL:

在使用 TO_CHAR 格式化日期和数字中查看并运行有关 KingBase Live SQL 的相关示例

TO_CHAR (datetime) 函数:示例

以下语句创建一个名为empl_temp并使用员工详细信息填充它的表:

CREATE TABLE empl_temp ( employee_id NUMBER(6), first_name VARCHAR(20), last_name VARCHAR(25), email VARCHAR(25), hire_date DATE DEFAULT SYSDATE, job_id VARCHAR(10), clob_column CLOB );

INSERT INTO empl_temp VALUES(111,'John','Doe','example.com','10-JAN-2015','1001','Experienced Employee');

INSERT INTO empl_temp VALUES(112,'John','Smith','example.com','12-JAN-2015','1002','Junior Employee');

INSERT INTO empl_temp VALUES(113,'Johnnie','Smith','example.com','12-JAN-2014','1002','Mid-Career Employee');

INSERT INTO empl_temp VALUES(115,'Jane','Doe','example.com','15-JAN-2015','1005','Executive Employee');

以下语句使用短格式和长格式显示日期:

SELECT hire_date "Default", TO_CHAR(hire_date,'DS') "Short", TO_CHAR(hire_date,'DL') "Long"FROM empl_temp WHERE employee_id IN (111, 112, 115);

Default

Short

Long

10-JAN-15

1/10/2015

Saturday, January 10, 2015

12-JAN-15

1/12/2015

Monday, January 12, 2015

15-JAN-15

1/15/2015

Thursday, January 15, 2015

8.387.4. TO_CHAR(number)

用法

to_char_number:

../../../_images/ToCharNumber1.png

目的:TO_CHAR(number)

使用可选的数字格式fmt将n转换为VARCHAR数据类型的值。n类型为NUMBER、BINARY_FLOAT或BINARY_DOUBLE,如果省略了fmt,那么n将转换为VARCHAR值,其长度恰好足以容纳其有效数字。

如果n为负数,则在应用格式后应用符号。因此TO_CHAR(-1, '$9')返回 -$1,而不是 $-1。

有关数字格式的信息, 请参阅“格式模型” 。

该'nlsparam'参数指定由数字格式元素返回的这些字符:

  • 小数字符

  • 组分隔符

  • 当地货币符号

  • 国际货币符号

这个参数可以有这种形式:

'NLS_NUMERIC_CHARACTERS = ''dg''

NLS_CURRENCY = ''text''

NLS_ISO_CURRENCY = territory '

字符d和g分别代表十进制字符和组分隔符。它们必须是不同的单字节字符。在带引号的字符串中,您必须在参数值周围使用两个单引号。十个字符可用于货币符号。

如果省略'nlsparam'或省略任何一个参数,则此函数将使用会话的默认参数值。

也可以看看:

"数据转换的安全注意事项"

例子:以下语句使用隐式转换将字符串和数字组合成数字:

SELECT TO_CHAR('01110' + 1) FROM DUAL;

TO_C

1111

将此示例与TO_CHAR (character)的第一个示例进行比较。

在下一个示例中,输出在货币符号左侧填充空白。在可选的数字格式 fmt 中,L指定本地货币符号并MI指定尾随减号。该示例显示了会话参数NLS_TERRITORY设置为的会话中的输出AMERICA。

SELECT TO_CHAR(-10000,'L99G999D99MI') "Amount" FROM DUAL;

Amount

$10,000.00-

在下一个示例中,NLS_CURRENCY指定用作L数字格式元素的本地货币符号的字符串。NLS_NUMERIC_CHARACTERS将逗号指定为用作D数字格式元素的小数分隔符的字符,将句点指定为用作数字格式元素的组分隔符的字符G。在许多国家/地区(例如在德国)都可以使用这些字符。

SELECT TO_CHAR(-10000,'L99G999D99MI', 'NLS_NUMERIC_CHARACTERS = '',.'' NLS_CURRENCY = ''AusDollars'' ') "Amount" FROM DUAL;

Amount

AusDollars10.000,00-

在下一个示例中,NLS_ISO_CURRENCY指示数据库将国际货币符号用于数字格式元素的POLAND领土C:

SELECT TO_CHAR(-10000,'99G999D99C', 'NLS_NUMERIC_CHARACTERS = '',.'' NLS_ISO_CURRENCY=POLAND') "Amount" FROM DUAL;

Amount

-10.000,00PLN

TO_CHAR (number) 功能:示例

以下语句创建一个名为empl_temp并使用员工详细信息填充它的表:

CREATE TABLE empl_temp ( employee_id NUMBER(6), first_name VARCHAR(20), last_name VARCHAR(25), email VARCHAR(25), hire_date DATE DEFAULT SYSDATE, job_id VARCHAR(10), clob_column CLOB );

INSERT INTO empl_temp VALUES(111,'John','Doe','example.com','10-JAN-2015','1001','Experienced Employee');

INSERT INTO empl_temp VALUES(112,'John','Smith','example.com','12-JAN-2015','1002','Junior Employee');

INSERT INTO empl_temp VALUES(113,'Johnnie','Smith','example.com','12-JAN-2014','1002','Mid-Career Employee');

INSERT INTO empl_temp VALUES(115,'Jane','Doe','example.com','15-JAN-2015','1005','Executive Employee');

以下语句将数值数据转换为数据库字符集:

SELECT To_char(employee_id) "NUM_TO_CHAR" FROM empl_temp WHERE employee_id IN ( 111, 112, 113, 115 );

NUM_TO_CHAR

111

112

113

115

8.388. TO_DATE

用法:

../../../_images/ToDate1.png

目的:TO_DATE转换char为DATE数据类型的值。

对于,您可以指定任何计算结果为CHAR、VARCHAR、NCHAR或NVARCHAR数据类型 char的字符串的表达式。

笔记:

此函数不会将数据转换为任何其他日期时间数据类型。有关其他日期时间转换的信息,请参阅TO_TIMESTAMP、TO_TIMESTAMP_TZ、TO_DSINTERVAL和TO_YMINTERVAL。

可选子句DEFAULT return_value ON CONVERSION ERROR允许您指定此函数在char转换为DATE时发生错误时返回的值。如果在评估char时发生错误,则此子句无效。return_value可以是表达式或绑定变量,它的计算结果必须为VARCHAR、NCHAR、NVARCHAR数据类型的CHAR字符串,或者为 null。该函数将char转换为DATE使用与return_value转换为DATE相同的方法。如果return_value无法转换为 DATE,则函数返回错误。

是指定格式的fmt日期时间模型格式char。如果省略fmt,则char必须采用默认日期格式。默认日期格式由NLS_TERRITORY初始化参数隐式确定,也可以由NLS_DATE_FORMAT参数显式设置。如果fmt是J,对于朱利安,则char必须是整数。

警告:

始终使用 指定格式掩码 ( fmt)是一种很好的做法TO_DATE,如以下部分中的示例所示。当它不带格式掩码使用时,该函数只有在使用与or参数char确定的相同格式时才有效。此外,除非指定显式格式掩码以避免依赖关系,否则该函数可能在数据库之间不稳定。 NLS_TERRITORYNLS_DATE_FORMAT

该'nlsparam'参数指定要转换为日期的文本字符串的语言。这个参数可以有这种形式:

'NLS_DATE_LANGUAGE = language'

不要使用TO_DATE带有参数DATE值的char函数。返回值的前两位数字DATE可能与原始 不同char,具体取决于fmt或默认日期格式。

此函数不CLOB直接支持数据。但是,CLOBs 可以通过隐式数据转换作为参数传入。

也可以看看:

“日期时间格式模型”和“数据类型比较规则”了解更多信息

SELECT TO_DATE( 'January 15, 1989, 11:00 A.M.', 'Month dd, YYYY, HH:MI A.M.', 'NLS_DATE_LANGUAGE = American') FROM DUAL;

TO_DATE('

15-JAN-89

如果参数设置为“ NLS_TERRITORY” ,则返回的值反映默认日期格式AMERICA。不同NLS_TERRITORY的值会导致不同的默认日期格式:

ALTER SESSION SET NLS_TERRITORY = 'KOREAN';

SELECT TO_DATE( 'January 15, 1989, 11:00 A.M.', 'Month dd, YYYY, HH:MI A.M.', 'NLS_DATE_LANGUAGE = American') FROM DUAL;

TO_DATE

89/01/15

DATE以下示例返回默认值,因为指定的表达式由于月份拼写错误而 无法转换为值:

SELECT TO_DATE('Febuary 15, 2016, 11:00 A.M.' DEFAULT 'January 01, 2016 12:00 A.M.' ON CONVERSION ERROR, 'Month dd, YYYY, HH:MI A.M.') "Value" FROM DUAL;

Value

01-JAN-16

8.389. TO_DSINTERVAL

用法:

../../../_images/to_dsinterval.png

../../../_images/to_dsinterval-sql.png

 

../../../_images/to_dsinterval-iso.png

功能:

将输入的格式串转换为关于日期和时间的interval。

格式串见上述图片

例子:

select to_dsinterval('5 23:58:59.23574') from dual;
    to_dsinterval
------------------------
 5 days 23:58:59.235740
(1 行记录)

select to_dsinterval('P5DT23H21M19.38S') from dual;
    to_dsinterval
------------------------
5 days 23:21:19.380000
(1 行记录)

8.390. TO_HEX

用法:

to_hex(number int or bigint)

功能:

将number转换到它等效的十六进制表示

例子:

select to_hex(14);

+-----------+
| to_hex    |
+===========+
| e         |
+-----------+

8.391. TO_JSON

用法:

to_json(anyelement)

功能:

to_json(anyelement) 把该值返回为json。数组和组合会被(递归)转换成数组和对象;对 于不是数组和组合的值,如果有从该类型到json的造型,造型函数将被用来执行该 转换 ;否则将产生一个标量值。对于任何不是数字、布尔、空值的标量类型, 将使用文本表达 ,在这种风格下它是一个合法的

json或者jsonb值。

例子:

select to_json('Fred said "Hi."'::text);

+-----------------------+
| to_json                               |
+=======================+
| "Fred said \"Hi.\""   |
+-----------------------+

8.392. TO_JSONB

用法:

to_jsonb(anyelement)

功能:

把该值返回为jsonb 。数组和组合会被(递归)转换成数组和对象;对 于不是数组和组合的值,如果有从该类型到json的造型,造型函数将被用来执行该 转换 ;否则将产生一个标量值。对于任何不是数字、布尔、空值的标量类型, 将使用文本表达 ,在这种风格下它是一个合法的

json或者jsonb值。

例子:

select to_jsonb('Fred said "Hi."'::text);

+-----------------------+
| to_jsonb                              |
+=======================+
| "Fred said \"Hi.\""   |
+-----------------------+

8.393. TO_NUMBER

用法:

../../../_images/ToNumber1.png

目的:TO_NUMBER转换expr为NUMBER数据类型的值。

expr可以是计算结果为CHAR类型字符串的任何表达式,VARCHAR、NCHAR或NVARCHAR,类型为NUMBER、BINARY_FLOAT或BINARY_DOUBL的数值或null 的任何表达式。如果Eexpr是NUMBER,则函数返回null,否则,该函数将expr转换为一个NUMBER值。

如果您指定exprof CHAR、VARCHAR、NCHAR或NVARCHAR数据类型,则可以选择指定格式模型fmt。

如果指定exprofBINARY_FLOAT或BINARY_DOUBLE数据类型,则不能指定格式模型,因为浮点数只能通过其内部表示来解释。

有关数字格式的信息, 请参阅“格式模型” 。

此函数中的参数与用于数字转换'nlsparam'的函数中的参数具有相同的目的。TO_CHAR有关详细信息,请参阅TO_CHAR(数字)。

此函数不CLOB直接支持数据。但是,CLOBs 可以通过隐式数据转换作为参数传入。

也可以看看:“数据类型比较规则”了解更多信息。

例子:以下示例将字符串数据转换为数字:

UPDATE employees SET salary = salary + TO_NUMBER('100.00', '9G999D99') WHERE last_name = 'Perkins';

SELECT TO_NUMBER('-AusDollars100','L9G999D99', ' NLS_NUMERIC_CHARACTERS = '',.'' NLS_CURRENCY = ''AusDollars'' ') "Amount" FROM DUAL;

Amount

-100

以下示例返回默认值 of,0因为指定的表达式无法转换为NUMBER值:

SELECT TO_NUMBER('2,00' DEFAULT 0 ON CONVERSION ERROR) "Value" FROM DUAL;

Value

0

8.394. TO_TIMESTAMP

用法:

to_timestamp (double precision )

功能:

把 Unix 时间(从 1970-01-01 00:00:00+00 开始的 秒)转换成 timestamp。返回值类型为time stamp without time zone

例子:

select to_timestamp (1284352323);

+-----------------------+
| to_timestamp                  |
+=======================+
| 2010-09-13 04:32:03   |
+-----------------------+

8.395. TO_TIMESTAMP_TZ

用法:

to_timestamp_tz(double precision )

功能:

把 Unix 时间(从 1970-01-01 00:00:00+00 开始的 秒)转换成 timestamp。返回值类型为time stamp with time zone

例子:

select to_timestamp_tz(1284352323);

+-----------------------+
| to_timestamp                  |
+=======================+
| 2010-09-13 04:32:03+00|
+-----------------------+

8.396. TO_YMINTERVAL

用法:

../../../_images/to_yminterval-sql.png

功能:

将输入的格式串转换为关于YEAR和MONTH的interval。

格式串见上述图片

例子:

select to_yminterval('5-8') from dual;
 to_yminterval
----------------
 5 years 8 mons
(1 行记录)

select to_yminterval('P2Y3M5DT23H') from dual;
to_yminterval
----------------
2 years 3 mons
(1 行记录)

8.397. TRANSACTION_TIMESTAMP

用法:

TRANSACTION_TIMESTAMP()

输出:

返回当时服务器时间。

功能:

返回当时服务器时间。

例子:

select TRANSACTION_TIMESTAMP();
  transaction_timestamp
-------------------------------
2022-06-28 19:54:41.988659+08
(1 row)

select TRANSACTION_TIMESTAMP;
  transaction_timestamp
-------------------------------
2022-06-28 19:55:28.701192+08
(1 row)

8.398. TRANSLATE

用法:

../../../_images/Translate1.png

目的:TRANSLATE返回expr其中每个字符 in 的所有出现都from_string替换为其对应的字符 in to_string。expr不在其中的字符from_string不会被替换。参数from_string可以包含比 更多的字符to_string。在这种情况下,末尾的多余字符from_string在to_string. 如果这些额外的字符出现在 中expr,那么它们将从返回值中删除。

如果一个字符在 中出现多次from_string,则使用to_string与第一次出现对应的映射。

您不能使用空字符串从返回值to_string中删除所有字符。from_stringOracle 数据库将空字符串解释为 null,如果此函数有 null 参数,则返回 null。要删除 中的所有字符from_string,请将另一个字符连接到开头from_string并将此字符指定为to_string. 例如,TRANSLATE( expr, ' x0123456789', ' x') 从 中删除所有数字expr。

TRANSLATE提供与该功能提供的功能相关的REPLACE功能。REPLACE允许您用一个字符串替换另一个字符串,以及删除字符串。TRANSLATE允许您在一次操作中进行多个单字符、一对一的替换。

此函数不CLOB直接支持数据。但是,CLOBs 可以通过隐式数据转换作为参数传入。

也可以看看:

“数据类型比较规则”了解更多信息和REPLACE

例子:以下语句将书名转换为可以用作(例如)文件名的字符串。包含四个字符:from_string空格、星号、斜杠和撇号(带有一个额外的撇号作为转义字符)。to_string仅包含三个下划线。这使得 中的第四个字符from_string没有相应的替换,因此从返回值中删除了撇号。

SELECT TRANSLATE('SQL*Plus User''s Guide', ' */''', '___') FROM DUAL;

TRANSLATE('SQL*PLUSU

SQL_Plus_Users_Guide

8.399. TRIM

用法:

../../../_images/TRIM1.png

目的:

  • TRIM使您能够从字符串中修剪前导字符或尾随字符(或两者)。如果trim_characterortrim_source是字符文字,则必须将其括在单引号中。

  • 如果指定LEADING,则 KingBase 数据库将删除任何等于 的前导字符trim_character。

  • 如果您指定TRAILING,则 KingBase 将删除任何等于 的尾随字符trim_character。

  • 如果您指定BOTH或不指定这三个字符,则 KingBase 将删除等于 .trim_character 的前导字符和尾随字符。

  • 如果不指定trim_character,则默认值为空格。

  • 如果您仅指定trim_source,则 KingBase 将删除前导和尾随空格。

  • 该函数返回一个数据类型为 的值VARCHAR。该值的最大长度是 的长度trim_source。

  • 如果其中一个trim_source或trim_character为 null,则该TRIM函数返回 null。

trim_character和都trim_source可以是VARCHAR或任何可以隐式转换为的数据类型VARCHAR。返回的字符串是VARCHAR( NVARCHAR) 数据类型 iftrim_source是CHAR或者VARCHAR( NCHARor NVARCHAR) 数据类型,而如果trim_source是CLOB数据类型。返回字符串与trim_source的字符集相同。

例子:此示例从hr架构中员工的雇用日期修剪前导零:

SELECT employee_id, TO_CHAR(TRIM(LEADING 0 FROM hire_date)) FROM employees WHERE department_id = 60 ORDER BY employee_id;

EMPLOYEE_ID TO_CHAR(T

103 20-MAY-08

104 21-MAY-07

105 25-JUN-05

106 5-FEB-06

107 7-FEB-07

8.400. TRUNC

8.400.1. TRUNC(date)

用法

trunc_date:

../../../_images/TruncDate1.png

目的:( TRUNCdate) 函数返回date一天中的时间部分,截断为格式 model 指定的单位fmt。NLS_CALENDAR该函数对会话参数不敏感。它按照公历的规则运作。返回的值始终是数据类型DATE,即使您为 指定了不同的日期时间数据类型date。如果省略fmt,则使用默认格式模型 ' DD',并且返回的值将被date截断为时间为午夜的日期。请参阅“ ROUND 和 TRUNC 日期函数”了解允许使用的格式模型fmt。

例子:以下示例截断日期:

SELECT TRUNC(TO_DATE('27-OCT-92','DD-MON-YY'), 'YEAR') "New Year" FROM DUAL;

New Year

01-JAN-92

使用 TRUNC 格式化日期:示例

在以下示例中,TRUNC函数返回输入日期,其中一天的时间部分按照格式模型中的指定截断:

WITH dates AS ( SELECT date'2015-01-01' d FROM dual union SELECT date'2015-01-10' d FROM dual union SELECT date'2015-02-01' d FROM dual union SELECT timestamp'2015-03-03 23:45:00' d FROM dual union SELECT timestamp'2015-04-11 12:34:56' d FROM dual ) SELECT d "Original Date", trunc(d) "Nearest Day, Time Removed", trunc(d, 'ww') "Nearest Week", trunc(d, 'iw') "Start of Week", trunc(d, 'mm') "Start of Month", trunc(d, 'year') "Start of Year" FROM dates;

在以下示例中,输入日期值被截断,并且该TO_CHAR函数用于获取截断日期值的分钟部分:

WITH dates AS ( SELECT date'2015-01-01' d FROM dual union SELECT date'2015-01-10' d FROM dual union SELECT date'2015-02-01' d FROM dual union SELECT timestamp'2015-03-03 23:45:00' d FROM dual union SELECT timestamp'2015-04-11 12:34:56' d FROM dual ) SELECT d "Original Date", trunc(d) "Date with Time Removed", to_char(trunc(d, 'mi'), 'dd-mon-yyyy hh24:mi') "Nearest Minute", trunc(d, 'iw') "Start of Week", trunc(d, 'mm') "Start of Month", trunc(d, 'year') "Start of Year" FROM dates;

以下语句更改当前会话的日期格式:

ALTER SESSION SET nls_date_format = 'dd-mon-yyyy hh24:mi';

在以下示例中,数据以新的日期格式显示:

WITH dates AS ( SELECT date'2015-01-01' d FROM dual union SELECT date'2015-01-10' d FROM dual union SELECT date'2015-02-01' d FROM dual union SELECT timestamp'2015-03-03 23:44:32' d FROM dual union SELECT timestamp'2015-04-11 12:34:56' d FROM dual ) SELECT d "Original Date", trunc(d) "Date, time removed", to_char(trunc(d, 'mi'), 'dd-mon-yyyy hh24:mi') "Nearest Minute", trunc(d, 'iw') "Start of Week", trunc(d, 'mm') "Start of Month", trunc(d, 'year') "Start of Year" FROM dates;

8.400.2. TRUNC(number)

用法

trunc_number:

../../../_images/TruncNumber1.png

目的:( TRUNCnumber) 函数返回n1截断到n2小数位。如果n2省略,则将n1截断为 0 位。n2可以为负数以截断(使为零)n2小数点左侧的数字。

此函数将任何数值数据类型或任何可以隐式转换为数值数据类型的非数值数据类型作为参数。如果省略n2,则函数返回与参数的数值数据类型相同的数据类型。如果包含n2,则函数返回NUMBER。

例子:以下示例截断数字:

SELECT TRUNC(15.79,1) "Truncate" FROM DUAL;

Truncate

15.7

SELECT TRUNC(15.79,-1) "Truncate" FROM DUAL;

Truncate

10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值