在Athena SQL中从年、月、日列生成yyyy-mm-dd格式日期的方法
将year/month/day列转换为yyyy-mm-dd格式日期的实现方法
不同数据库有不同的简洁实现方式,以下是几种常用数据库的解决方案:
MySQL/MariaDB
有两种可靠的方式:
- 使用
MAKEDATE结合时间间隔计算,自动处理补零和日期合法性校验:
SELECT MAKEDATE(year, 1) + INTERVAL (month - 1) MONTH + INTERVAL (day - 1) DAY AS date_column FROM your_table;
- 拼接字符串后转换为日期(需确保月份、日期是两位数,用
LPAD补零):
SELECT DATE(CONCAT(year, '-', LPAD(month, 2, '0'), '-', LPAD(day, 2, '0'))) AS date_column FROM your_table;
PostgreSQL
直接用专门的MAKE_DATE函数,简洁且安全:
SELECT MAKE_DATE(year, month, day) AS date_column FROM your_table;
也可以用字符串拼接转日期的方式:
SELECT TO_DATE(CONCAT(year, '-', LPAD(month::TEXT, 2, '0'), '-', LPAD(day::TEXT, 2, '0')), 'YYYY-MM-DD') AS date_column FROM your_table;
SQL Server
SQL Server 2012及以上版本支持DATEFROMPARTS函数,一步到位:
SELECT DATEFROMPARTS(year, month, day) AS date_column FROM your_table;
如果是旧版本,需要拼接字符串并补零后转日期:
SELECT CAST(CONCAT(year, '-', RIGHT('0' + CAST(month AS VARCHAR(2)), 2), '-', RIGHT('0' + CAST(day AS VARCHAR(2)), 2)) AS DATE) AS date_column FROM your_table;
Oracle
使用TO_DATE函数拼接字符串转换:
SELECT TO_DATE(CONCAT(CONCAT(year, '-', LPAD(month, 2, '0')), '-', LPAD(day, 2, '0')), 'YYYY-MM-DD') AS date_column FROM your_table;
注意:所有方法都会自动校验日期的合法性(比如2月30日这类无效日期会返回NULL或报错,具体取决于数据库设置)。
内容的提问来源于stack exchange,提问作者Janzaib M Baloch
相关产品推荐
相关产品推荐

