本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
CAST
CAST 允许您将一个值表达式或数据类型转换为另一种值表达式或数据类型。
CAST ( <cast-operand> AS <cast-target> ) <cast-operand> := <value-expression> <cast-target> := <data-type>
有效转换
将 CAST 与下面第一列中列出的类型的源操作数一起使用,可以不受限制地创建第二列中列出的转换目标类型。不支持其他目标类型。
| 源操作数类型 | 目标操作数类型 |
|---|---|
|
任何数值类型(DECIMAL、DECIMAL、DECIMAL、DUBLE) |
VARCHAR、CHAR 或任何数值类型(参见注释 A) |
|
VARCHAR, |
以上所有内容,加上 DATE、TIME、TIMESTAMP、DAY-TIME 间隔、布尔值 |
|
DATE |
日期、VARCHAR、CHAR、时间戳 |
|
TIME |
时间、VARCHAR、CHAR、时间戳 |
|
TIMESTAMP |
时间、VARCHAR、CHAR、时间戳、日期 |
|
DATIME 间隔 |
日间间隔、BIGINT、DECIMAL、CHAR、VARCHAR |
|
BOOLEAN |
VARCHAR、CHAR、布尔值 |
|
二进制、DATIMAL |
二进制、DATIMAL |
示例
2.1 到 CHAR/VARCHAR 约会
+-------------+ | EXPR$0 | +-------------+ | 2008-08-23 | +-------------+ 1 row selected
(请注意,如果提供的输出规格不足,则不选择任何行:
values(cast(date'2008-08-23' as varchar(9))); 'EXPR$0' No rows selected
(因为日期文字需要 10 个字符)
在下一个例子中,右边的日期用空白填充(由于 CHAR 数据类型的语义):
+----------------------------+ | EXPR$0 | +----------------------------+ | 2008-08-23 | +----------------------------+ 1 row selected
实数到整数
实数(数字或十进制)由转换结果四舍五入:
+---------+ | EXPR$0 | +---------+ | -2 | +---------+ 1 row selected
字符串转换为时间戳
有以下两种方法可将字符串转换为时间戳。第一个使用 CAST,如下一个主题所示。其他用途字符转时间戳 (Sys).
使用 CAST 将字符串转换为时间戳
以下示例说明了这种转换方法:
'EXPR$0' '2007-02-19 21:23:45' 1 row selected
如果输入字符串缺少六个字段(年、月、日、小时、分钟、秒)中的任何一个,或者使用了与上面显示的分隔符不同的分隔符,CAST 将不会返回值。(不允许使用小数秒。)
因此,如果输入字符串的格式不适合 CAST,则要将字符串转换为时间戳,必须使用 CHAR_TO_TIMESTAMP 方法。
使用 CHAR_TO_TIMESTAMP 将字符串转换为时间戳
当输入字符串的格式不适合 CAST 时,可以使用 CHAR_TO_TIMESTAMP 方法。它的另一个好处是,您可以指定要在后续处理中使用时间戳字符串的哪些部分,并创建仅包含这些部分的 TIMESTAMP 值。为此,您需要指定一个模板来标识您想要的部分,例如 “YYYY-mm”,仅使用年份和月份。
这些区域有: input-date-time string-to-be-converted 可以包含完整时间戳的全部或任何部分,即任何或全部标准元素的值('yyyy-mm-dd hh: mm: ss')。如果所有这些元素都存在于您的输入字符串中,并且'yyyy-mm-dd hh: mm: ss'是您提供的模板,则输入字符串元素将按该顺序解释为年、月、日、时、分和秒,例如 '2009-09-16 03:15:24 '。yyyy 不能是大写字母;hh 可以是大写字母,表示使用 24 小时时钟。有关许多有效说明符示例,请参阅查看本主题后面的表格和示例。有关所有有效说明符的信息,请参见类 SimpleDateFormat
CHAR_TO_TIMESTAMP 在函数调用中使用您指定的模板作为参数。该模板使 TIMESTAMP 结果仅使用 TIMESTAMP 的部分内容 input-date-time 您在模板中指定的值。然后,生成的 TIMESTAMP 中的这些字段将包含从你的 TIMESTAMP 中提取的相应数据 input-date-time 字符串;未在模板中指定的字段将使用默认值(见下文)。CHAR_TO_TIMESTAMP 使用的模板格式定义为类 SimpleDateFormat
函数调用语法如下所示:
CHAR_TO_TIMESTAMP('<format_string>','<input_date_time_string>')
其中,<format_ string> 是您为所需的 <date_time_string> 部分指定的模板,<input_date_time_string> 是将转换为 TIMESTAMP 结果的原始字符串。
每个字符串必须用单引号引起来,并且 <input_date_time_string> 的每个元素必须位于其在模板中的相应元素的范围内。否则,不返回任何结果。
示例 1
-
这些区域有: input-string-element 其位置与 MM 对应的必须是介于 1 到 12 之间的整数,因为其他任何值都不代表有效的月份。
-
这些区域有: input-string-element 其位置与 dd 对应的必须是介于 1 到 31 之间的整数,因为其他任何值都不代表有效的日期。
-
但是,如果 MM 为 2,则 dd 不能为 30 或 31,因为 2 月从来没有这样的日子。
但是,对于月或天,替换省略部分的默认起始值为 01。
例如,使用 '2009-09-16 03:15:24 '作为输入字符串,您可以通过指定来获得仅包含日期的时间戳,其他字段(如小时、分钟或秒)为零
CHAR_TO_TIMESTAMP('yyyy-MM-dd','2009-09-16 03:15:24').
结果将是时间戳 2009-09-16 00:00:00。
示例 2
-
如果调用在模板中保留了小时和分钟,而省略了月、日和秒,如以下调用所示 — CHAR_TO_TIMESTAMP ('yyyy-hh-mm', '2009-09-16 03:15:24') — 那么生成的时间戳将是 2009-01-01 03:15:00。
| 模板 | 输入字符串 | 输出时间戳 | 注意 |
|---|---|---|---|
'yyyy-MM-dd hh:mm:ss'
|
'2009-09-16 03:15:24'
|
'2009-09-16 03:15:24'
|
输入字符串必须使用 “yyyy-mm-dd hh: mm: ss” 或其子集或重新排序的形式;使用诸如 “2009 年 9 月 16 日星期三 03:15:24” 之类的输入字符串不起作用,这意味着不会产生任何输出。 |
'yyyy-mm'
|
'2012-02-08 07:23:19'
|
'2012-01-01 00:02:00'
|
上面的模板仅指定了第一年和第二分钟,因此输入字符串 (“02”) 中的第二个元素用作分钟。 默认值用于月和日 (“01”) 以及小时和秒 (“00”)。 |
'yyyy-ss-mm'
|
'2012-02-08 07:23:19'
|
'2012-01-01 00:08:02'
|
上面的模板仅按该顺序指定年、秒和分钟,因此输入字符串中的第二个元素(“02”)用作秒,第三个元素用作分钟(“08”)。默认值用于月和日(“01”)和小时(“00”)。 |
'MMM dd, yyyy'
|
'March 7, 2010'
|
'2010-03-07 00:00:00'
|
嗯以上模板中的MMM与 “March” 匹配;模板的 “逗号空格” 与输入字符串匹配。 — — 如果模板缺少逗号,则输入字符串也必须缺少逗号,否则没有输出; — — 如果输入字符串缺少逗号,则模板也必须缺少逗号。 |
'MMM dd,'
|
'March 7, 2010'
|
'1970-03-07 00:00:00'
|
请注意,上面的模板不使用年份说明符,导致输出 TIMESTAMP 使用该纪元中最早的年份,即 1970 年。 |
'MMM dd,y'
|
'March 7, 2010'
|
'2010-03-07 00:00:00'
|
使用上面的模板,如果输入字符串是 “3月7日10日”,则输出时间戳将为 “0010-03-07 00:00:00”。 |
'M-d'
|
'2-8'
|
'1970-02-08 00:00:00'
|
如上所述,模板中缺少 yyyy 说明符,则使用这个时代(1970 年)的最早年份。 输入字符串 “2-8-2012” 会得到相同的结果;使用 “2012-2-8” 不会给出任何结果,因为 2012 不是有效的月份。 |
'MM-dd-yyyy'
|
'06-23-2012 10:11:12'
|
'2012-06-23 00:00:00'
|
如果模板和输入在相同位置使用破折号作为分隔符(如上所述)就可以了。由于模板省略了小时、分钟和秒,因此在输出 TIMESTAMP 中使用零。 |
'dd-MM-yy hh:mm:ss'
|
'23-06-11 10:11:12'
|
'2011-06-23 10:11:12'
|
您可以按任意顺序设置说明符,只要该顺序与您提供的输入字符串的含义相匹配,如上所述。以下下一个示例的模板和输入字符串与本示例具有相同的含义(以及相同的输出 TIMESTAMP),但它们指定了几天前的几个月和小时前的秒数。 |
'MM-dd-yy ss:hh:mm'
|
'06-23-11 12:10:11'
|
'2011-06-23 10:11:12'
|
在上面使用的模板中,月份和日说明符的顺序与上面的示例相反,秒的说明符在小时之前而不是分钟之后;但是由于输入字符串还把月份放在几天之前,秒放在小时之前,所以含义(和输出时间戳)是与上面的示例相同。 |
'yy-dd-MM ss:hh:mm'
|
'06-23-11 12:10:11'
|
'2006-11-23 10:11:12'
|
上面使用的模板反向使用年份和月份说明符(与上面的示例相比),而输入字符串保持不变。在这种情况下,输出 TIMESTAMP 使用输入字符串的第一个元素作为年份,第二个元素作为日期,第三个元素作为月份。 |
'dd-MM-yy hh:mm'
|
'23-06-11 10:11:12'
|
'2011-06-23 10:11:00'
|
如上所述,在模板中省略秒数的情况下,输出 TIMESTAMP 使用 00 秒。任意数量的 y 说明符都会产生相同的结果;但是如果输入字符串无意中使用了 1 而不是 11 作为年份,如 '23-06-1 10:11:12 ',则输出时间戳变为 '0001-06-23 10:11:00'。 |
'MM/dd/yy hh:mm:ss'
|
|
|
如果模板和输入在相同位置使用斜杠作为分隔符就可以了,如上所述;否则,不输出。 使用说明符 hh,12:11:10 和 00:11:10 的输入时间与早晨时间的含义相同。 |
'MM/dd/yy HH:mm:ss'
|
'12/19/11 12:59:59' '12/19/11 21:08:07'
|
'2011-12-19 12:59:59' '2011-12-19 21:08:07'
|
使用此模板,输入字符串值 “2011-12-19 00:11:12” 或 “2011-12-19 12:11:12” 将失败,因为 “2011” 不是一个月,正如模板字符串 “mm/dd/YY HH: mm: ss” 所要求/预期的那样。 但是,更改模板会提供有用的输出:
请注意,对于中午 12 点之后的时间,即下午和晚上的时间,小时说明符必须是 HH 而不是 hh,并且输入字符串必须以 24 小时制时间指定下午或晚上,小时从 00 到 23 不等。 — — 使用说明符 HH,12:11:10 和 00:11:10 的输入时间有不同的含义,第一个是下午的时间,第二个是早上的时间。 — — 使用说明符 hh,从 12:00 到 11:59:59 的时间是早晨: — — 给定说明符 hh: mm: ss,输出时间戳将在早上为输入字符串 '12:09:08' 和输入字符串 '00:09:08' 包含 '00:09:08'; — — 而 — — 给定说明符 HH: mm: ss,早上输入字符串 '00:09:08' 的输出时间戳将包含 '00:09:08' — — 下午输入字符串 '12:09:08' 的输出时间戳将包含 '12:09:08'。 |
更多示例
以下示例说明了在 CHAR_TO_TIMESTAMP 中使用各种模板,包括一些常见的误解。
values (CHAR_TO_TIMESTAMP('yyyy-hh-mm','2009-09-16 03:15:24')); 'EXPR$0' '2009-01-01 09:16:00' 1 row selected
请注意,上面输入字符串中的字段是按照模板中说明符给出的顺序使用的,如 dashes-as-delimiters 在模板和输入字符串中:先是年份,然后是小时,然后是分钟。由于模板中不存在月和日的说明符,因此它们在输入字符串中的值被忽略,输出 TIMESTAMP 中的两个值都替换了 01。模板将小时和分钟指定为第二个和第三个输入值,因此 09 变成了小时,16 变成了分钟。几秒钟内没有指定符,因此使用了 00。
年份说明符可以单独使用,也可以在与输入字符串匹配的分隔符后显示年末说明符,并使用 hours: minutes: seconds 说明符之一:
values (CHAR_TO_TIMESTAMP('yyyy','2009-09-16 03:15:24') ); 'EXPR$0' '2009-01-01 00:00:00' 1 row selected values (CHAR_TO_TIMESTAMP('yyyy hh','2009-09-16 03:15:24') ); 'EXPR$0' No rows selected
上面的模板失败了,因为它有一个 space-as-delimiter 在 “hh” 之前,而不是输入字符串的日期说明中使用的短划线分隔符之前;
而下面的四个模板之所以起作用,是因为它们使用相同的分隔符将年份说明符与下一个说明符分开,这与输入字符串的日期规范中使用的分隔符相同(第一种情况为短划线,第二种为空格,第三种为斜杠,第四种为破折号)。
values (CHAR_TO_TIMESTAMP('yyyy-hh','2009-09-16 03:15:24') ); 'EXPR$0' '2009-01-01 09:00:00' 1 row selected values (CHAR_TO_TIMESTAMP('yyyy hh','2009 09 16 03:15:24') ); 'EXPR$0' '2009-01-01 09:00:00' 1 row selected values (CHAR_TO_TIMESTAMP('yyyy/hh','2009/09/16 03:15:24') ); 'EXPR$0' '2009-01-01 09:00:00' 1 row selected values (CHAR_TO_TIMESTAMP('yyyy-mm','2009-09-16 03:15:24') ); 'EXPR$0' '2009-01-01 00:09:00' 1 row selected
但是,如果模板指定了月 (MM),则除非还指定了天,否则无法指定小时、分钟或秒:
模板仅指定年份和月份,因此在生成的时间戳中省略了天/小时/分钟/秒:
values (CHAR_TO_TIMESTAMP('yyyy-MM','2009-09-16 03:15:24') ); 'EXPR$0' '2009-09-01 00:00:00' 1 row selected
接下来的两个模板失败,缺少 “天” 说明符:
values (CHAR_TO_TIMESTAMP('yyyy-MM hh','2009-09-16 03:15:24') ); 'EXPR$0' No rows selected values (CHAR_TO_TIMESTAMP('yyyy-MM hh:','2009-09-16 03:15:24') ); 'EXPR$0' No rows selected
接下来的三个成功了,使用 “天” 说明符:
values (CHAR_TO_TIMESTAMP('yyyy-MM-dd hh','2009-09-16 03:15:24') ); 'EXPR$0' '2009-09-16 03:00:00' 1 row selected
上面的模板 “yyyy-mm-dd hh” 仅指定了小时 (hh),没有分钟或秒。由于 hh 是模板的第 4 个标记/元素,因此其值将取自输入字符串 “2009-09-16 03:15:24” 的第 4 个标记/元素;第 4 个元素是 03,然后用作小时的输出值。由于既未指定 mm 也未指定 ss,因此使用定义为 mm 和 ss 起点的默认值或初始值,即零。
values (CHAR_TO_TIMESTAMP('yyyy-MM-dd ss','2009-09-16 03:15:24') ); 'EXPR$0' '2009-09-16 00:00:03' 1 row selected
上面的模板 “yyyy-mm-dd ss” 指定输入字符串的第 4 个标记/元素将用作秒 (ss)。输入字符串 “2009-09-16 03:15:24” 的第 4 个元素是 03,它成为模板中指定的秒数输出值;并且由于模板中既没有指定 hh 也没有指定 mm,因此使用它们的默认值或初始值,即零。
values (CHAR_TO_TIMESTAMP('yyyy-MM-dd mm','2009-09-16 03:15:24') ); 'EXPR$0' '2009-09-16 00:03:00' 1 row selected
上面的模板 “yyyy-mm-dd mm” 指定将输入字符串的第 4 个标记/元素用作分钟 (mm)。输入字符串 “2009-09-16 03:15:24” 的第 4 个元素是 03,它成为模板中指定的分钟数输出值;并且由于模板中既没有指定 hh 也没有指定 ss,因此使用它们的默认值或初始值,即零。
更多失败,缺少 “天” 说明符:
values (CHAR_TO_TIMESTAMP('yyyy-MM- mm','2009-09-16 03:15:24') ); 'EXPR$0' No rows selected values (CHAR_TO_TIMESTAMP('yyyy-MM mm','2009-09-16 03:15:24') ); 'EXPR$0' No rows selected values (CHAR_TO_TIMESTAMP('yyyy-MM hh','2009-09-16 03:15:24') ); 'EXPR$0' No rows selected
关于分隔符和值
模板中的分隔符必须与输入字符串中的分隔符相匹配;输入字符串中的值对于它们所对应的模板说明符必须是可接受的。
按照一般惯例,冒号用于将小时与分钟分开,分与秒分开。同样,一般惯例是使用破折号或斜线将年与月分开,将月与日分开。任何parallel 用法似乎都有效,以下示例说明了这一点。
values (CHAR_TO_TIMESTAMP('MM/dd/yy hh:mm:ss','2009/09/16 03:15:24') ); 'EXPR$0' No rows selected
上面的示例失败了,因为 2009 不是一个月的可接受值,而月数是模板中的第一个说明符 (MM)。
values (CHAR_TO_TIMESTAMP('MM/dd/yy hh:mm:ss','09/16/11 03:15:24') ); 'EXPR$0' '2011-09-16 03:15:24' 1 row selected
上面的示例之所以成功,是因为分隔符是parallel 的(斜杠对斜杠,冒号对冒号),并且每个值对于相应的说明符都是可接受的。
values (CHAR_TO_TIMESTAMP('MM/dd/yy hh/mm/ss','09/16/11 03/15/24') ); 'EXPR$0' '2011-09-16 03:15:24' 1 row selected
上面的示例之所以成功,是因为分隔符是parallel 的(所有斜杠),并且每个值对于相应的说明符都是可接受的。
values (CHAR_TO_TIMESTAMP('MM/dd/yy hh-mm-ss','09/16/11 03-15-24') ); 'EXPR$0' '2011-09-16 03:15:24' 1 row selected values (CHAR_TO_TIMESTAMP('yyyy|MM|dd hh|mm|ss','2009|09|16 03|15|24') ); 'EXPR$0' '2009-09-16 03:15:24' 1 row selected values (CHAR_TO_TIMESTAMP('yyyy@MM@dd hh@mm@ss','2009@09@16 03@15@24') ); 'EXPR$0' '2009-09-16 03:15:24' 1 row selected
上面的示例之所以成功,是因为分隔符是parallel 的,每个说明符的值都是可接受的。
在以下示例中,请注意,提供的字符串中的遗漏会导致模板值 “yyyy” 产生合乎逻辑但意外或意想不到的结果。生成的 TIMESTAMP 值中以年份形式给出的值直接派生自所提供字符串中的第一个元素。
VALUES(CHAR_TO_TIMESTAMP('yyyy','09-16 03:15')); 'EXPR$0' '0009-01-01 00:00:00' 1 row selected VALUES(CHAR_TO_TIMESTAMP('yyyy','16 03:15')); 'EXPR$0' '0016-01-01 00:00:00' 1 row selected
时间戳转换为字符串
values(cast( TIMESTAMP '2007-02-19 21:25:35' AS VARCHAR(25))); 'EXPR$0' '2007-02-19 21:25:35' 1 row selected
请注意,CAST 需要 TimeStamp-Literal 才能真正具有 '的完整格式yyyy-mm-dd hh: mm: s'。如果该完整格式的任何部分缺失,则该文字将被视为非法而被拒绝,如下所示:
values( TIMESTAMP '2007-02-19 21:25'); Error: Illegal TIMESTAMP literal '2007-02-19 21:25': not in format 'yyyy-MM-dd HH:mm:ss' (state=,code=0) values( TIMESTAMP '2007-02-19 21:25:00'); 'EXPR$0' '2007-02-19 21:25:00' 1 row selected
此外,如果提供的输出规格不足,则不选择任何行:
values(cast( TIMESTAMP '2007-02-19 21:25:35' AS VARCHAR(18))); 'EXPR$0' No rows selected (Because the timestamp literal requires 19 characters)
这些限制同样适用于转换为时间或日期类型。
字符串到时间
values(cast(' 21:23:45.0' AS TIME)); 'EXPR$0' '21:23:45' 1 row selected
有关更多信息,请参阅 Note A。
DATE
values(cast('2007-02-19' AS DATE)); 'EXPR$0' '2007-02-19' 1 row selected
请注意,字符串的 CAST 要求用于转换为 TIME 或 DATE 的字符串操作数具有分别表示时间或日期所需的精确格式。
如下所示,在以下情况下,投射失败:
-
字符串操作数包含与目标类型无关的数据,或
-
间隔操作数('日小时:分钟:seconds.milliseconds')不包括必要的数据,或
-
指定的输出字段太小,无法保存转换结果。
values(cast('2007-02-19 21:23:45.0' AS TIME)); 'EXPR$0' No rows selected
失败,因为它包含不允许作为时间使用的日期信息。
values(cast('2007-02-19 21:23:45.0' AS DATE)); 'EXPR$0' No rows selected
失败,因为它包含不允许作为日期的时间信息。
values(cast('2007-02-19 21' AS DATE)); 'EXPR$0' No rows selected
失败,因为它包含不允许作为日期的时间信息。
values(cast('2009-02-28' AS DATE)); 'EXPR$0' '2009-02-28' 1 row selected
成功是因为它包含了日期字符串的正确表示形式。
values(CAST (cast('2007-02-19 21:23:45.0' AS TIMESTAMP) AS DATE)); 'EXPR$0' '2007-02-19' 1 row selected
成功是因为它在将字符串转换为 DATE 之前正确地将字符串转换为 TIMESTAMP。
values(cast('21:23' AS TIME)); 'EXPR$0' No rows selected
失败,因为它缺少时间所需的时间信息(秒)。
(允许指定小数秒,但不是必需的。)
values(cast('21:23:34:11' AS TIME)); 'EXPR$0' No rows selected
失败,因为它包含了错误的小数秒表示。
values(cast('21:23:34.11' AS TIME)); 'EXPR$0' '21:23:34' 1 row selected
之所以成功,是因为它包含了小数秒的正确表示。
values(cast('21:23:34' AS TIME)); 'EXPR$0' '21:23:34' 1 row selected
此示例之所以成功,是因为它包含了秒数的正确表示形式,但没有分数秒。
精确数值的间隔
间隔的 CAST 要求间隔操作数中只有一个字段,例如 MINUTE、HOUR、SECOND。
如果间隔操作数有多个字段,例如 MINUTE TO SECOND,则转换失败,如下所示:
values ( cast (INTERVAL '120' MINUTE(3) as decimal(4,2))); +---------+ | EXPR$0 | +---------+ +---------+ No rows selected values ( cast (INTERVAL '120' MINUTE(3) as decimal(4))); +---------+ | EXPR$0 | +---------+ | 120 | +---------+ 1 row selected values ( cast (INTERVAL '120' MINUTE(3) as decimal(3))); +---------+ | EXPR$0 | +---------+ | 120 | +---------+ 1 row selected values ( cast (INTERVAL '120' MINUTE(3) as decimal(2))); +---------+ | EXPR$0 | +---------+ +---------+ No rows selected values cast(interval '1.1' second(1,1) as decimal(2,1)); +---------+ | EXPR$0 | +---------+ | 1.1 | +---------+ 1 row selected values cast(interval '1.1' second(1,1) as decimal(1,1)); +---------+ | EXPR$0 | +---------+ +---------+ No rows selected
对于年份,不允许将十进制分数作为输入和输出。
values cast(interval '1.1' year (1,1) as decimal(2,1)); Error: org.eigenbase.sql.parser.SqlParseException: Encountered "," at line 1, column 35. Was expecting: ")" ... (state=,code=0) values cast(interval '1.1' year (1) as decimal(2,1)); Error: From line 1, column 13 to line 1, column 35: Illegal interval literal format '1.1' for INTERVAL YEAR(1) (state=,code=0) values cast(interval '1.' year (1) as decimal(2,1)); Error: From line 1, column 13 to line 1, column 34: Illegal interval literal format '1.' for INTERVAL YEAR(1) (state=,code=0) values cast(interval '1' year (1) as decimal(2,1)); +---------+ | EXPR$0 | +---------+ | 1.0 | +---------+ 1 row selected
有关其他示例,请参阅 SQL 运算符:更多示例。
限制
Amazon Kinesis Data Analytics 不支持直接将数值转换为间隔值。这与 SQL: 2008 标准背道而驰。将数值转换为间隔的推荐方法是将数值与特定的间隔值相乘。例如,要将整数 time_in_millis 转换为日间间隔:
time_in_millis * INTERVAL '0 00:00:00.001' DAY TO SECOND
例如:
values cast( 5000 * (INTERVAL '0 00:00:00.001' DAY TO SECOND) as varchar(11)); 'EXPR$0' '5000' 1 row selected