我有一个这样的数据集:
year | month | day | cust_id |
2018 9 7 xyz001
数据集的问题在于日期被拆分为年、月和日。
当我使用 concat 年、月和日时,我得到以下结果:
date:
201897
但我想要这样的东西:
date:
20180907
也就是说,每当我们有个位数时,我想在月份和日列中添加附加零,并保留两位数的值。
如何在 SQL 中执行此操作?
一种方法是使用 lpad()
。
SELECT concat(year, lpad(month, 2, '0'), lpad(day, 2, '0')) date
FROM elbat;
但是,您应该修改该设计并仅使用日期/时间类型的列。
您可以使用如下逻辑在大多数数据库中转换为日期:
select cast(concat(year, '-', month, '-', day) as date)
有一个真正的日期可能就足够了。 或者,您可能希望使用适当的日期格式转换回字符串。 例如,在MySQL中,您可以使用date_format()
。
试试这个。
选择年 + ' ' +月 + ' ' + 日
在大多数 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