我有两个表items和sale_invoice_items,items有一个标志指示该项是否过期,sale_invoice_items有过期日期。
现在,当执行选择返回我正在执行的发票时:

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,但到期时间不是,而是返回一个字节数组。
我做错什么了?

最佳答案

select
....
, case when items.expiry = true then
     sales_invoice_items.expiry
else
     '-'
end as expiry
....
from
....

您需要确保
sales_invoice_items.expiry


'-'

是相同的,即字符。你可以在这里使用转换函数
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format
为了达到这个目的。
如果希望返回日期,则需要确定“其他”情况的预期值:虚拟日期、空值。。。。?

关于mysql - 在MySQL中有条件地选择一个字段或静态字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16749324/

10-12 05:29