SQL查询以零添加日期(月/日)值

时间:2018-12-31 16:07:11

标签: mysql sql date amazon-athena presto

我有一个像这样的数据集:

computeHit

数据集的问题在于日期被分为年,月和日。

当我使用concat年,月和日时,我得到以下结果:

await

但是我想要这样的东西:

year | month | day | cust_id |
2018    9       7    xyz001

也就是说,只要我们有一位数字,我想在月和日列上添加零,而不要留下两位数字。

如何在SQL中执行此操作?

4 个答案:

答案 0 :(得分:0)

您可以使用以下逻辑将大多数数据库中的日期转换为:

select cast(concat(year, '-', month, '-', day) as date)

拥有真正的日期可能就足够了。或者您可能想使用适当的日期格式转换回字符串。例如,在MySQL中,您可以使用date_format()

答案 1 :(得分:0)

一种方法是使用lpad()

SELECT concat(year, lpad(month, 2, '0'), lpad(day, 2, '0')) date
       FROM elbat;

但是,您应该修改该设计并仅使用日期/时间类型的列。

答案 2 :(得分:0)

在大多数SQL风格中,您可以使用case语句应用逻辑(在这种情况下,将单个数字日期值前缀为0):http://www.mysqltutorial.org/mysql-case-statement/

例如

select 
Year,
case
when len(month) = 2 then month
when len(month) = 1 then '0'+month else '' end as month,
case 
when len(day) = 2 then day
when len(day) = 1 then '0'+day else '' end as day
from table

我希望这有助于展示如何构建案例语句,然后可以将其全部连接如下:

select 
Year +
case
when len(month) = 2 then month
when len(month) = 1 then '0'+month else '' end +
case 
when len(day) = 2 then day
when len(day) = 1 then '0'+day else '' end +''+ as FullDate
from table

答案 3 :(得分:0)

尝试一下。

选择年份+''+月份+''+日期