如何在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
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) ...