SQL:如果字段不为空,我如何按字段排序,否则使用另一个字段

标签 sql mysql

我想按 dtModified(修改日期时间)对我的 Posts 进行排序,如果它不为空(修改后的 b4),否则按 dtPosted 排序(发布日期时间)

最佳答案

您可以使用 COALESCE :

ORDER BY COALESCE(dtModified, dtPosted)

另一种选择是使用 MySQL 特定函数 IFNULL而不是 COALESCE


在 MySQL 上测试:

CREATE TABLE table1 (dtModified DATETIME NULL, dtPosted DATETIME NOT NULL);
INSERT INTO table1 (dtModified, dtPosted) VALUES
('2010-07-31 10:00:00', '2010-07-30 10:00:00'),
(NULL                 , '2010-07-31 09:00:00'),
('2010-07-31 08:00:00', '2010-07-30 10:00:00');

SELECT dtModified, dtPosted
FROM table1
ORDER BY COALESCE(dtModified, dtPosted)

结果:

dtModified           dtPosted
2010-07-31 08:00:00  2010-07-30 10:00:00
NULL                 2010-07-31 09:00:00
2010-07-31 10:00:00  2010-07-30 10:00:00

关于SQL:如果字段不为空,我如何按字段排序,否则使用另一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3377854/

相关文章:

sql - 选择语句返回父项和无限子项

mysql - 如何将数据库中的条目均分为 5 个?

PHP 脚本运行缓慢,但服务器 CPU 空闲

php - 在 mysql 表中上传大约 10,000,000 条记录的大型 CSV 文件也包含重复行

sql - 如何在 SQLite 中列出特定表的所有可用 View ?

php - MySQL语法错误; "check the manual that corresponds to your MySQL server version.."

sql - 如何从表中仅选择字段 1 中的值与字段 2 中的至少两个不同值配对的行

sql - 如何在执行存储过程脚本时声明静态日期?

java - 连接 JDBC 时出错

javascript - 隐藏/显示用户等级的菜单项