首页 > 解决方案 > 发票年份格式YYYY转YY

问题描述

我无法更改第二年的格式 (REPPL/ 20 /2021 /00004) ==> (REPPL/ 20/ 21 /00004)

DATE_FORMAT(@dt, '%y'),(@dt+1)

当我添加 DATE_FORMAT(@dt, '%y'),(@dt+1,'%y')它的抛出错误

请帮忙谢谢

INSERT INTO sales_invoice(
invoice_no,
date_invoiced,
order_num
) SELECT
CONCAT_WS('/','REPPL',DATE_FORMAT(@dt, '%y'),(@dt +1),
    COALESCE(
        LPAD(
            CASE WHEN @dt > DATE_FORMAT(@dt, '%Y-04-01') THEN SUM(date_invoiced > 
 DATE_FORMAT(@dt,'%Y-04-01')) ELSE SUM(date_invoiced BETWEEN DATE_FORMAT(@dt, '%Y-04-01') - INTERVAL 
 1 YEAR AND DATE_FORMAT(@dt, '%Y-04-01'))END +1,5,0),LPAD(1, 5, 0))),@dt,"132132"FROM sales_invoice;

标签: mysqlsql

解决方案


那么你只是通过@dt +1你根本没有格式化它。您需要为 CONCAT 中的每个参数添加 DATE_FORMAT,而不仅仅是第一个,first 将仅格式化第一个,第一个()...

试试这个,添加一年的间隔,然后格式化:

DATE_FORMAT(DATE_ADD(@dt, INTERVAL 1 YEAR), '%y')

例子:

CONCAT_WS('/','REPPL',DATE_FORMAT(@dt, '%y'),DATE_FORMAT(DATE_ADD(@dt, INTERVAL 1 YEAR), '%y')),

小提琴:

**Schema (MySQL v5.7)**
    
---

**Query #1**

    select CONCAT_WS('/','REPPL',DATE_FORMAT('2020/08/16', '%y'),DATE_FORMAT(DATE_ADD('2020/08/16', INTERVAL 1 YEAR), '%y')) AS ConcatenatedString;

| ConcatenatedString |
| ------------------ |
| REPPL/20/21        |

---

在 DB Fiddle 上查看


推荐阅读