将字符串添加到 MySQL 查询结果中

5

我需要带有一些前缀和后缀的mySql结果。这是我的代码:

SELECT bk_id, bk_rtype, villas_db.v_name AS villa_name
FROM booking_db
INNER JOIN villas_db ON booking_db.bk_vid = villas_db.v_id
WHERE '2012-11-02'
BETWEEN bk_date1
AND bk_date2
ORDER BY bk_id DESC
LIMIT 0 , 30

结果如下:
bk_id   bk_rtype    villa_name
30          2           T2
29          3           V1

所以我需要的结果是:
bk_id   bk_rtype    villa_name     booking_no
30          2           T2         B2-00030
29          3           V1         B3-00029

当B是一个由“-”和sprintf("%05d",bk_id)分离的预定前缀时,请建议。

请提供建议。

2个回答

6
您可以使用以下CONCATLPAD函数来实现:
 SELECT bk_id, bk_rtype, villas_db.v_name AS villa_name, 
        CONCAT('B',bk_rtype,'-', LPAD(bk_id, 5, '0')) AS booking_no
 FROM booking_db
 INNER JOIN villas_db ON booking_db.bk_vid = villas_db.v_id
 WHERE '2012-11-02'
     BETWEEN bk_date1
     AND bk_date2
 ORDER BY bk_id DESC 
 LIMIT 0 , 30 ; 

你的答案很好,但是离最佳还有一点差距。不过我已经找到了我的解决方案。 - Wilf
1
@Wilf:你的解决方案和我的答案有什么不同? - Yogendra Singh
@RocketDonkey:感谢您的关注。实际上,在回复之前我已经回答了10多分钟。OP说他找到了解决方案,但我没有注意到区别 :) - Yogendra Singh
哈哈,我以前也遇到过这种情况 - 我花了10分钟摸不着头脑,直到意识到根本没有任何区别 :) - RocketDonkey
感谢你们两个。不同之处在于我使用“LPAD”来添加前导零(而你的代码是'000' - 在你编辑之前),并且数字不超过5位。事实上,当我在这里留下问题时,我尝试了谷歌这些解决方案。但是,是的,你的解决方案也是正确的。问候。 - Wilf
@Wilf:没错,但是即使使用 LPAD 进行编辑也是在回答发布后不久就完成的(在你的回复之前)。无论如何,你的问题已经解决了,这是好事。享受吧 :-) - Yogendra Singh

2

我找到了解决方案:

SELECT bk_id, bk_rtype, villas_db.v_name AS villa_name, concat( 'B', bk_rtype, '-', lpad( bk_id, 5, 0 ) ) AS booking_no
FROM booking_db
INNER JOIN villas_db ON booking_db.bk_vid = villas_db.v_id
WHERE '2012-11-02'
BETWEEN bk_date1
AND bk_date2
ORDER BY bk_id DESC
LIMIT 0 , 30

2
它与我的答案有什么不同? - Yogendra Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接