MySQL查询中的Concat值(处理空值)

ewo*_*468 10 mysql

我正在编写一个PHP和MySQL应用程序,其中我必须将多个列值连接成一个单独的列.我将使用concat()函数,但它不处理空值,而concat_ws(),它不返回我想要的输出结果.我需要的东西可以在Oracle数据库中实现,如下所示:

 Select 'The Surname Is'||last_name from employees;
Run Code Online (Sandbox Code Playgroud)

我的问题是如何使用MySQL实现相同的结果...而不使用上面提到的函数?

Fil*_*efp 27

IFNULL的CONCAT:

SELECT
  CONCAT('The Surname Is ', IFNULL(last_name, 'sadly not available'))
FROM `employees`
Run Code Online (Sandbox Code Playgroud)


Min*_*esh 10

您还可以使用CONCAT_WS函数来处理NULL值

SELECT 
CONCAT_WS(' ','The Surname Is',lastname) 
FROM `employees`
Run Code Online (Sandbox Code Playgroud)


Mar*_*ner 8

@Minesh:CONCAT_WS不会"关注"NULL值.为了说明这一点......

CONCAT_WS("~",house.name,house.address,house.type)
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,如果house.addressNULL,则返回的结果将不包含预期的整齐双tilda(~~).它将是一个只有1个tilda的tilda分隔列表.例如"有趣的房子〜豪宅"

  • 我认为它很糟糕,因为该函数执行两个不同的任务,其中第二个任务没有由函数名称暗示。首先它连接起来,太好了,谢谢,这就是我想要的。然后它会删除空白字符串列表项,哇哦,我没有要求你这样做。该函数应称为 CONCAT_NN_WS(),其中 NN 代表“Not Nulls”。如果我要求我的软件将 5 项内容连接到一个列表中,我期望得到一个包含 5 项的列表。我并不指望软件会说“哦,顺便说一句,我清空了垃圾箱,喂了猫,还给你妈妈打电话邀请她来过周​​末” (2认同)