Mysql 将不同的列合并为一列,然后按此顺序排列

Mysql 将不同的列合并为一列,然后按此顺序排列,mysql,sql,Mysql,Sql,经过一个简单的查询 SELECT Col_ID, datetime1, datetime2, datetime3 FROM TABLE_DATETIME WHERE datetime1 LIKE '20130805%' OR datetime2 LIKE '20130805%' OR datetime3 LIKE '20130805%' 。。。我有这种情况 Col_ID |datetime1 |datetime2 |datetime3 | -

经过一个简单的查询

SELECT Col_ID, datetime1, datetime2, datetime3 
FROM TABLE_DATETIME 
WHERE datetime1 LIKE '20130805%'
    OR datetime2 LIKE '20130805%' 
    OR datetime3 LIKE '20130805%'
。。。我有这种情况

Col_ID    |datetime1     |datetime2     |datetime3     |
----------|--------------|--------------|--------------|
40302025  |20130805123022|NULL          |NULL          |
40302028  |20130805180055|NULL          |NULL          |
40302030  |NULL          |20130805090055|NULL          |
40302055  |NULL          |20130805190055|NULL          |
40302074  |NULL          |NULL          |20130805070055|
现在,在前面的同一个查询中,我想将datetime1、datetime2、datetime3合并到一列中,我们称之为“ALL_DATETIME”,然后按此排序以获得此结果

Col_ID    |ALL_DATETIME  |
----------|--------------|
40302074  |20130805070055|
40302030  |20130805090055|
40302025  |20130805123022|
40302028  |20130805180055|
40302055  |20130805190055|

使用
NULL
处理功能

SELECT Col_ID, ifnull(datetime1, ifnull(datetime2, datetime3 )) as ALL_DATETIME 
FROM TABLE_DATETIME 
WHERE datetime1 LIKE '20130805%'
OR datetime2 LIKE '20130805%' 
OR datetime3 LIKE '20130805%'
order by 2
试试这个

SELECT Col_ID, greatest (coalesce(datetime1,0), coalesce(datetime2,0),coalesce( datetime3,0) ) alldatetime
FROM TABLE_DATETIME 
WHERE datetime1 LIKE '20130805%'
OR datetime2 LIKE '20130805%' 
OR datetime3 LIKE '20130805%'

您可以使用此功能:

SELECT Col_ID
     , COALESCE(datetime1,datetime2,datetime3) AS ALL_DATETIME 
FROM TABLE_DATETIME
WHERE ...
ORDER BY COALESCE(datetime1,datetime2,datetime3)
输出:

|   COL_ID |   ALL_DATETIME |
-----------------------------
| 40302074 | 20130805070055 |
| 40302030 | 20130805090055 |
| 40302025 | 20130805123022 |
| 40302028 | 20130805180055 |
| 40302055 | 20130805190055 |

请参阅使用tsql代码来实现此目的。如果第一次查询中出现错误,则
或datetime2(如'20130805%')
应为
或datetime3(如'20130805%')
是的。。。我刚学了一个新函数。非常非常感谢。。。结果是。。。5.records@OscarZarrus这是你的一个错误,我遵循它:)你已经做了两次
或datetime2
),好的,我更新了答案,现在它的5个结果是:9对不起,这是我的错。很抱歉回应我和杰克斯。是夏天的炎热让我错了:)