我想连接 8 个字段(sp、lp、gp、sr、zd、md、pr、rs)中的值,并将结果返回为“化学”。问题是任何一条记录在 8 个可能的值中只有两个(可能三个或四个)值,其余值将为 NULL。此外,如果该值为 NULL,我既不希望显示前面的文本(SP:、LP:、GP:、SR: 等...),也不希望显示(换行符)。
通过对此处的研究,我发现了 CONCAT_WS() 和 IFNULL()。为了实现我想要的结果,我需要帮助来实现这些功能。
CONCAT(
'SP: ', sp, '<br />',
'LP: ', lp, '<br />',
'GP: ', gp, '<br />',
'SR: ', sr, '<br />',
'ZD: ', zd, '<br />',
'MD: ', md, '<br />',
'PR: ', pr, '<br />',
'RS: ', rs
) AS chemistry
最佳答案
您可以在此处使用两个事实:首先,CONCAT (与许多其他 SQL 函数一样)返回 NULL
如果任何参数是 NULL
;第二,CONCAT_WS将跳过 NULL
值。
这使得查询变得像...一样简单
CONCAT_WS('<br />',
CONCAT('SP:', sp),
CONCAT('LP:', lp),
...
) AS chemistry
说了这么多,我真的想知道是否有必要在查询(数据库)级别进行这种格式化。首先,使用 <br />
分离元素实际上只是表示的一个细节——而且它的变化比你希望的要频繁得多。其次,在应用程序级别编写和调整此代码可能要容易得多 - 例如,通过使用循环。
关于php - MySQL 查询中的 CONCAT 值忽略 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18832655/