sql查询,将日期(月/日)值附加为零

mec1mxoz  于 2021-06-17  发布在  Mysql
关注(0)|答案(4)|浏览(579)

我有这样一个数据集:

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

数据集的问题是日期被分为年、月和日。
当我使用concat年、月、日时,我得到以下结果:

date:
201897

但我想要这样的东西:

date:
20180907

也就是说,每当我们有一个数字时,我想在月和日列中添加零,而不使用两个数字的值。
如何在sql中执行此操作?

nhn9ugyo

nhn9ugyo1#

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

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

有一个真实的日期可能就足够了。或者您可能希望使用适当的日期格式转换回字符串。例如,在mysql中,您可以使用 date_format() .

eqoofvh9

eqoofvh92#

试试这个。
选择年+月+日

ql3eal8s

ql3eal8s3#

一种方法是使用 lpad() .

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

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

oknrviil

oknrviil4#

在大多数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

我希望这有助于展示如何构建case语句,然后您可以按以下方式连接它们:

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

相关问题