后浪云OceanBase教程里讲的那个日期字面量怎么用,感觉挺重要但又有点绕
- 问答
- 2026-01-21 20:43:47
- 2
什么是日期字面量?
简单讲,日期字面量就是直接在SQL语句里写死的日期或时间值,它不是从一个表里查出来的,也不是一个变量,而是你明确键入的一串字符,用来表示一个特定的时间点。
你想查询所有在“2023年国庆节”之后入职的员工,你的SQL语句里就不可能去现算国庆节是哪天,而是直接把 '2023-10-01' 这个值写在查询条件里,这个 '2023-10-01' 就是一个最典型的日期字面量。
为什么感觉“绕”?——关键在于格式
“绕”的地方主要在于,你不能随心所欲地写日期,比如你写成'2023/10/1'、'01-Oct-2023'或者'20231001',OceanBase可能不认识,会报错,它必须遵循一套约定的格式才能被正确识别。
教程里强调,OceanBase(和标准SQL类似)主要支持以下几种类型的日期时间字面量,每种都有其标准格式:
日期字面量(DATE) 这是最常用的,只包含年、月、日。

- 标准格式:
'YYYY-MM-DD' - 例子:
'2023-05-15'表示2023年5月15日。'1999-12-31'表示1999年12月31日。
- 要点:
- 年份通常用4位数,如果用2位数,OceanBase会根据规则进行转换(比如
'23-05-15'可能被理解为2023-05-15),但为了避免混淆,强烈建议总是使用4位数的年份。 - 月和日如果是个位数,前面必须补零。
'2023-5-5'是错误的,必须写成'2023-05-05'。 - 必须用单引号括起来。
- 年份通常用4位数,如果用2位数,OceanBase会根据规则进行转换(比如
时间字面量(TIME) 这个表示一天中的某个时间,精确到秒或更小。
- 标准格式:
'HH:MI:SS[.fraction]' - 例子:
'14:30:00'表示下午2点30分整。'09:05:45.123456'表示上午9点5分45秒又123456微秒。
- 要点:
- 小时是24小时制。
- 分和秒是个位数时需要补零。
- 小数部分(微秒)是可选的,用小数点分隔。
日期时间字面量(DATETIME) 这是前两者的结合,既有日期又有时间。
- 标准格式:
'YYYY-MM-DD HH:MI:SS[.fraction]' - 例子:
'2023-05-15 14:30:00'表示2023年5月15日下午2点30分。'1999-12-31 23:59:59.999999'表示1999年最后一秒的末尾。
- 要点:
- 日期和时间部分中间必须有一个空格。
- 其他规则和日期、时间字面量一样。
时间戳字面量(TIMESTAMP)
TIMESTAMP和DATETIME在格式上看起来一模一样,都是 'YYYY-MM-DD HH:MI:SS[.fraction]',它们的主要区别在于内部存储和时区处理方式,但对于字面量的写法来说,规则是相同的,你把它当成DATETIME来写一般不会错。
怎么用?——最常见的场景:在WHERE子句中过滤数据
日期字面量最大的用处就是作为查询条件,我们开头的那个例子:

SELECT * FROM employees WHERE hire_date > '2023-10-01';
这条语句的意思就是从employees表中找出所有入职日期在2023年10月1日之后的员工记录,这里的 '2023-10-01' 就是日期字面量的典型应用。
再举一个带时间的例子,查询在某个具体时间点之后下的订单:
SELECT order_id FROM orders WHERE create_time > '2023-05-15 10:00:00';
如果我的格式不标准怎么办?——使用STR_TO_DATE函数
教程里肯定会提到这个非常重要的函数,它是解决“绕”的钥匙,如果你的日期字符串不是标准格式,比如是'15/05/2023'(日/月/年),OceanBase无法直接识别,你就可以用STR_TO_DATE函数来告诉它如何解读。
基本用法:STR_TO_DATE('日期字符串', '格式说明符')

-
例子:把
'15/05/2023'转换成日期。SELECT STR_TO_DATE('15/05/2023', '%d/%m/%Y');这里,
%d代表两位数的日,%m代表两位数的月,%Y代表四位数的年,这个函数会返回一个OceanBase能理解的日期值。 -
实际应用:
SELECT * FROM orders WHERE order_date = STR_TO_DATE('15/05/2023', '%d/%m/%Y');
反过来,也有一个DATE_FORMAT函数,可以把数据库里的日期按照你想要的格式输出成字符串,这在做报表时非常有用。
总结一下要点
- 重要性:日期字面量是SQL查询中过滤时间条件的基础,无处不在。
- “绕”的点:在于必须严格遵守
'YYYY-MM-DD'和'YYYY-MM-DD HH:MI:SS'这样的标准格式,不能自己想当然。 - 解决之道:如果数据源格式不标准,牢记使用
STR_TO_DATE('字符串', '格式')函数进行转换。 - 良好习惯:总是使用4位年份,个位数的月日时分秒前面补零,并用单引号将整个字面量括起来。
多练习在WHERE子句里使用这些字面量,或者用STR_TO_DATE函数转换一些非常规格式的日期,很快就能熟悉了。
本文由畅苗于2026-01-21发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/84181.html
