如何在select查询| mySQL中创建条件

如何在select查询| mySQL中创建条件,mysql,Mysql,基本上,我有一个表,其中包含一个人的名字和两个日期列,一个名为ready\u date和get\u date 有时一个人可能没有ready\u日期,但总是有get\u日期。其他时候,记录可以同时包含ready\u日期和get\u日期 基于以下逻辑,我希望select查询创建一个名为date的查询列,该列显示ready\u date或get\u date 逻辑: 如果一个人有准备就绪日期和获取日期让日期相等准备就绪日期 如果一个人有获取日期但没有准备日期让日期相等获取日期 查询结果的外观示例。这是

基本上,我有一个表,其中包含一个人的名字和两个日期列,一个名为
ready\u date
get\u date

有时一个
可能没有
ready\u日期
,但总是有
get\u日期
。其他时候,记录可以同时包含
ready\u日期
get\u日期

基于以下逻辑,我希望select查询创建一个名为date的查询列,该列显示
ready\u date
get\u date

逻辑:

如果一个
准备就绪日期
获取日期
日期
相等
准备就绪日期

如果一个
获取日期
但没有
准备日期
日期
相等
获取日期

查询结果的外观示例。这是可能实现的吗

您可以使用的是


我只想使用
coalesce()

coalesce()
返回其第一个非空参数

  • 如果某人有
    get\u date
    但没有
    ready\u date
    ,则表达式返回
    get\u date
    (因为第一个参数
    ready\u date
    null

  • 如果某人有
    get\u date
    ready\u date
    ,则表达式返回
    ready\u date
    (因为它是第一个参数,并且不是
    null


MySQL提供了多种执行此类操作的方法:

SELECT Person, IF(ready_date IS NULL, get_date, ready_date) ...
SELECT Person, IFNULL(ready_date, get_date) ...
SELECT Person, CASE WHEN ready_date IS NOT NULL THEN ready_date ELSE get_date END ...
SELECT Person, COALESCE(ready_date, get_date) ...
前两者基本上是等价的;但是第四个(COALESCE)接受两个以上的参数,并从列表中返回第一个非空参数。(这相当于a不为空时的
情况,然后是a不为空时的b,然后是b…否则为空结束

奖金事实: 在旧版本的MS Sql Server中,IF()不受支持,因此必须使用CASE(并且可以被视为更便于携带)。MS Sql Server与
IFNULL()
等效的是
ISNULL()
…这在MySql中是一个完全不同的函数。

看起来像
IF(ready\u date“”、ready\u date、get\u date)一样是“date”
select 
    t.*, 
    coalesce(ready_date, get_date) date
from mytable t
SELECT Person, IF(ready_date IS NULL, get_date, ready_date) ...
SELECT Person, IFNULL(ready_date, get_date) ...
SELECT Person, CASE WHEN ready_date IS NOT NULL THEN ready_date ELSE get_date END ...
SELECT Person, COALESCE(ready_date, get_date) ...