在MySQL中有条件地选择字段或静态字符串

在MySQL中有条件地选择字段或静态字符串,mysql,select,conditional,Mysql,Select,Conditional,我有两个表项目和销售发票项目,项目有一个标志指示项目是否过期,销售发票项目有过期日期。 现在,在执行选择以返回我正在执行的发票时: select items.name as f1, IF( items.expiry =TRUE, sale_invoice_items.expiry, '-') as f2 from sale_invoices, sale_invoice_items, items where sale_invoices.id = 3 and sale_invoice

我有两个表项目销售发票项目,项目有一个标志指示项目是否过期,销售发票项目有过期日期。 现在,在执行选择以返回我正在执行的发票时:

select  items.name as f1,  IF( items.expiry =TRUE,  sale_invoice_items.expiry, '-') as f2    
from sale_invoices, sale_invoice_items, items where  sale_invoices.id = 3 and sale_invoice_items.invoice_id = sale_invoices.id and items.id = sale_invoice_items.item_id
因此,如果项目过期,则在字段中返回过期日期,否则,只需写“-”

返回的项名称为ok,但过期日期为not,它返回的是字节数组

我做错了什么

select
....
, case when items.expiry = true then 
     sales_invoice_items.expiry 
else 
     '-' 
end as expiry
....
from
....
您需要确保

sales_invoice_items.expiry

是相同的,即字符。您可以在此处使用转换函数

为了实现这一点


如果希望返回日期,则需要确定“其他”情况下的期望值:伪日期、空值……?

谢谢,两种情况下的格式都必须匹配,这是我的错误,因为到期日是日期时间格式,而“-”是字符串。用日期格式(sale\u invoice\u items.expiration,“%d-%m-%y”)替换sale\u invoice\u items.expiration成功了
'-'