写点什么

YashanDB 字面量

作者:YashanDB
  • 2025-03-25
    广东
  • 本文字数:3590 字

    阅读完需:约 12 分钟

字面量的意思是不变的值,它以字符串的形式直接出现在 SQL 和 PL 语句中,通过声明时的格式对其进行类型区分,例如''用于识别字符型的字面量,DATE 用于识别日期时间型的字面量。

字面量几乎可以用在所有场景中,例如作为值、参数、格式、标识或输出显示。

字面量与变量、常量在概念上的区别:

  • 字面量是以字符串形式出现的固定值,它没有存储容器,只是一种书面上的记法。

  • 变量是用来存储数据的一个容器,且容器可以被多次赋值。

  • 常量是变量的一种,但它只能被初始赋值,且不能再次被赋值。

字符串字面量(Character Literal)

字符串字面量是使用单引号''包围的英文字母、中文汉字、数字字符和特殊字符的组合,其声明方式如下所示:




YashanDB 将字符串字面量解析成与其等长的 CHAR 类型数据,例如'China'就是'CHAR(5)'。

示例

SELECT 'SHENZHEN', '3.14567', '!@#$',TYPEOF('SHENZHEN') type1,TYPEOF('3.14567') type2,TYPEOF('!@#$') type3FROM DUAL;'SHENZHEN' '3.14567' '!@#$' TYPE1 TYPE2 TYPE3---------- --------- ------ ----- ----- -----SHENZHEN   3.14567   !@#$   char  char  char
复制代码


数值字面量(Numeric Literal)

数值字面量是以数字 0 ~ 9 和小数点组合形成的数值,数值前可以用正号(+)或负号(-)将其变成正数负数(默认为正数)。其声明方式如下图所示:



数值字面量包含 4 个数据类型:INT、BIGINT、NUMBER、DOUBLE。YashanDB 按如下规则解析这些类型:

  • 当数值后出现'd'或'D'时,将解析为 DOUBLE 类型。

  • 小数解析成 NUMBER 类型。

  • 整数首先尝试将它解析为 INT 类型(判断是否在 INT 值域[-231, 231 - 1]),失败则尝试解析为 BIGINT 类型(判断是否在 BIGINT 值域[-263,263 - 1]),失败则解析为 NUMBER 类型。

  • 超过 NUMBER 范围解析为 DOUBLE 类型。

例如,11d 被解析为 DOUBLE 类型,2147483647 被解析为 INT 类型,2147483648 被解析为 BIGINT 类型,1.1 被解析为 NUMBER 类型。

示例

SELECT 1, TYPEOF(1) FROM DUAL;           1 TYPEOF(1)------------ ---------           1 integer  SELECT 2147483647, TYPEOF(2147483647) FROM DUAL;  2147483647 TYPEOF(2147483647)------------ ------------------  2147483647 integer  SELECT 2147483648, TYPEOF(2147483648) FROM DUAL;           2147483648 TYPEOF(2147483648)--------------------- ------------------           2147483648 bigint  SELECT 1.1, TYPEOF(1.1) FROM DUAL;        1.1 TYPEOF(1.1)----------- -----------        1.1 number            SELECT 11d, TYPEOF(11d) FROM DUAL;
11 TYPEOF(11D)----------- ----------- 1.1E+001 double
复制代码

科学计数法数值字面量

YashanDB 支持将类似 1.24E3 格式的字面量解析为科学计数法输入的 NUMBER 类型数据。

示例

SELECT 1.24e3 FROM dual;      1.24E3 ------------         1240
复制代码


日期字面量(Date Literal)

日期字面量是以 DATE 关键字开始,直至单引号''包围的字符串右引号结束的值,采用'yyyy-mm-dd'进行格式匹配,例如DATE '2020-01-01'。其声明方式如下图所示,其中 date_str 表示符合 DATE 类型标准格式的字符串。



示例

SELECT DATE '2020-01-01', TYPEOF(DATE '2020-01-01') TYPE FROM DUAL;DATE'2020-01-01'                 TYPE-------------------------------- -----2020-01-01 00:00:00              date
复制代码


时间戳字面量(Timestamp Literal)

日期时间戳字面量是以 TIMESTAMP 开始,直至单引号''包围的字符串右引号结束的值,采用'yyyy-mm-dd hh24:mi:ss.ff'进行格式匹配,时分秒可缺省,例如TIMESTAMP '2020-01-01 13:08:28'。其声明方式如下图所示,其中 timestamp_str 表示符合 TIMESTAMP 类型标准格式的字符串。



示例

SELECT TIMESTAMP '2020-01-01 13:08:28', TYPEOF(TIMESTAMP '2020-01-01 13:08:28') TYPE FROM DUAL;TIMESTAMP'2020-01-01                                             TYPE---------------------------------------------------------------- -------------2020-01-01 13:08:28.000000                                       timestamp
复制代码


年到月字面量(Interval Year To Month Literal)

年到月字面量的声明方式如下图所示,其中 YMInterval_str 表示符合 INTERVAL YEAR TO MONTH 类型标准格式的字符串,year_precision 表示年的精度(默认值为 2)。



声明时可以指定年、月中的一个或多个域;当单独指定的月间隔超过 11 时,YashanDB 将自动将其转换为年间隔。

示例

-- Example 1: 仅指定年间隔SELECT INTERVAL '120' YEAR(3) YMINTERVAL,TYPEOF(INTERVAL '120' YEAR(3)) TYPEFROM DUAL;YMINTERVAL      TYPE--------------- -------------------------+120-00         interval year to month  -- Example 2: 仅指定月间隔,超过11月将转换为年SELECT INTERVAL '3' MONTH YMINTERVAL,TYPEOF(INTERVAL '3' MONTH) TYPEFROM DUAL;YMINTERVAL      TYPE--------------- -------------------------+00-03          interval year to month  SELECT INTERVAL '14' MONTH YMINTERVAL,TYPEOF(INTERVAL '14' MONTH) TYPEFROM DUAL;YMINTERVAL      TYPE--------------- -------------------------+01-02          interval year to month  -- Example 3: 指定年和月间隔,在此情况下月超过11时无法转换为年SELECT INTERVAL '100-11' YEAR(3) TO MONTH YMINTERVAL,TYPEOF(INTERVAL '100-11' YEAR(3) TO MONTH) TYPEFROM DUAL;YMINTERVAL      TYPE--------------- -------------------------+100-11         interval year to month  SELECT INTERVAL '100-14' YEAR(3) TO MONTH YMINTERVAL FROM DUAL;YAS-00008 type convert error : not a valid month
复制代码


天到秒字面量(Interval Day To Second Literal)

天到秒字面量的声明方式如下图所示,其中 DSInterval_str 表示符合 INTERVAL DAY TO SECOND 类型标准格式的字符串,day_precision 表示天的精度(默认值为 2),second_precision 表示秒的精度(默认值为 6)。



声明时可以指定天、时、分、秒中的一个或多个域;当时超过 23、分和秒超过 59,且没有指定上级域时,YashanDB 会自动将其进位。

示例

-- Example 1: 仅指定天SELECT INTERVAL '50' DAY DSINTERVAL,TYPEOF(INTERVAL '50' DAY) TYPEFROM DUAL;DSINTERVAL                       TYPE-------------------------------- -------------------------+50 00:00:00.000000              interval day to second  -- Example 2: 仅指定时,超过23时则进位为天SELECT INTERVAL '160' HOUR INTERVAL1, INTERVAL '13' HOUR INTERVAL2 FROM DUAL;INTERVAL1                        INTERVAL2-------------------------------- --------------------------------+06 16:00:00.000000              +00 13:00:00.000000  -- Example 3: 仅指定分,超过59分则进位为时SELECT INTERVAL '63' MINUTE INTERVAL1,INTERVAL '32' MINUTE INTERVAL2FROM DUAL;INTERVAL1                        INTERVAL2-------------------------------- --------------------------------+00 01:03:00.000000              +00 00:32:00.000000  -- Example 4: 仅指定秒,超过59秒则进位为分SELECT INTERVAL '63' SECOND INTERVAL1,INTERVAL '45' SECOND INTERVAL2,INTERVAL '59.999999' SECOND(6)FROM DUAL;INTERVAL1                        INTERVAL2                        INTERVAL'59.999999'S-------------------------------- -------------------------------- --------------------------------+00 00:01:03.000000              +00 00:00:45.000000              +00 00:00:59.999999  -- Example 5:指定多个域SELECT INTERVAL '1000 23:30' DAY(4) TO MINUTE INTERVAL1,INTERVAL '12:15:21.647' HOUR TO SECOND(3) INTERVAL2FROM DUAL;INTERVAL1                        INTERVAL2-------------------------------- --------------------------------+1000 23:30:00.000000            +00 12:15:21.647000  -- Example 6:当存在上级域时,下级域无法进位SELECT INTERVAL '12:63' HOUR TO MINUTE FROM DUAL;YAS-00008 type convert error : not a valid minute
复制代码

二进制字面量(BIT Literal)

二进制字面量是以字符 b 开始,直至单引号''包围的字符串右引号结束的值。其声明方式如下,其中 bit_str 表示符合二进制类型标准格式的字符串。

bit_literal :=  b'bit_str'

示例

SELECT b'010011101',TYPEOF(b'010011101') TYPEFROM DUAL;B'010011101'                                                     TYPE---------------------------------------------------------------- -----10011101                                                         bit
复制代码


用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB字面量_YashanDB_InfoQ写作社区