如何从日期中删除前导零

AVM*_*AVM 2 mysql date-format datetime

我有一个查询,其中使用了以下内容

date_add(DATE_FORMAT(ss.week_startdate,'%y-%m-%d'),INTERVAL (tt.day_id- 1 )DAY) as date
Run Code Online (Sandbox Code Playgroud)

字段的数据类型是datetime,结果日期是这样的

2015-04-06
Run Code Online (Sandbox Code Playgroud)

但想要的结果是这样的

2015-04-6
Run Code Online (Sandbox Code Playgroud)

我不需要0在前一天。我试过这个

date_add(DATE_FORMAT(ss.week_startdate,'%y-%m-%e'),INTERVAL (tt.day_id- 1 )DAY) as date
Run Code Online (Sandbox Code Playgroud)

但没有用。任何人都可以请帮忙!

ype*_*eᵀᴹ 5

您以错误的顺序应用了这些功能。您需要先进行日期算术(date_add,无论如何)并应用format最后一个:

DATE_FORMAT( DATE_ADD(ss.week_startdate, INTERVAL (tt.day_id - 1) DAY),
             '%Y-%m-%e')
Run Code Online (Sandbox Code Playgroud)

您还需要%Y一个 4 位数的年份,而不是%y.


另请注意,最好也更改第一个查询,因为它执行了很多冗余操作:

date_add(
    DATE_FORMAT(ss.week_startdate,'%y-%m-%d'),
                INTERVAL (tt.day_id- 1 )DAY
               )
as date
Run Code Online (Sandbox Code Playgroud)
  • 首先,它计算:DATE_FORMAT(ss.week_startdate,'%y-%m-%d')
    其中的日期时间值转换为与格式的字符串(例如,对于当前日期,2015年4月28日): '15-04-28'
  • 然后,它确实:date_add( previous_result, INTERVAL (tt.day_id-1) DAY)
    但是previous_resultis 是一个字符串,因此必须将其转换为dateor datetime。2 年格式不会导致错误的日期只是偶然的。在此转换之后,date_add()计算了 ,并且因为第一个参数(转换后)是 adate并且您只添加天数,而不是小时或更小的单位,结果也是 a date
  • 然后,as day考虑了 ,但这没有任何作用,因为之前的操作也导致date了 。
  • 最后,结果以日期的默认格式显示,这(又一次意外!)是%Y-%m-%d,以获得所需的格式。

总共有三个转换 ( datetime -> char -> date -> char),而您只需要一个。