【问题标题】:mysql SELECT IF statement with ORmysql SELECT IF 语句与 OR
【发布时间】:2012-02-25 02:09:16
【问题描述】:

以下工作 - 当退款等于 1 时返回 Y,否则默认为 N

IF(fd.charge_back = 1, 'Y', 'N') AS charge_back

但是我似乎无法让这个工作?语法是否有效

IF(compliment = ('set' OR 'Y' OR 1), 'Y', 'N') AS customer_compliment

【问题讨论】:

  • 如果你把你的条件改成compliment IN ('set','Y','1')会怎么样
  • 您可能会考虑在查询中不这样做。这是格式化,不再查询。你会得到一个明确的真/假 1/0 作为回报,这应该可以解决问题。例如,您可以这样做:if(compliment) 等,这不能用 Y/N 之类的字符串来完成。 Y/N 也与语言无关,而布尔值则不是。因此,例如在翻译成荷兰语时,您必须将 Y/N 再次转换为 J/N。简而言之:除非您有充分的理由这样做,或者只需要采取一个截止解决方案,否则也许不要这样做。
  • 感谢您的反馈,我同意布尔值会更有价值。但是,我正在使用现有数据,并且无法在不进一步影响其他部分的情况下更改所有值。

标签: mysql sql select if-statement


【解决方案1】:

大概这会起作用:

IF(compliment = 'set' OR compliment = 'Y' OR compliment = 1, 'Y', 'N') AS customer_compliment

【讨论】:

  • 也许是个愚蠢的问题,但IN 子句在这里有效吗?例如。 IF(compliment IN('set','Y',1), 'Y', 'N') AS customer_compliment?
【解决方案2】:
IF(compliment IN('set','Y',1), 'Y', 'N') AS customer_compliment

将按照Buttle Butkus 的建议完成工作。

【讨论】:

  • 这是对VARCHARINT 值的一个很好的呼喊,但不适用于nullCross-reference here.
猜你喜欢
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 2016-07-20
  • 2016-12-29
  • 2015-10-22
  • 2012-10-11
  • 1970-01-01
  • 2012-09-19
相关资源
最近更新 更多