IF语句在SQL中的where子句中

ein*_*ein 6 mysql sql

我正在开发一个日历应用程序.它以两种格式存储时间.该表包含以下列title, startDate, startTime.如果用户提供开始时间加上开始日期.数据库在列中存储UNIX时间戳(自UNIX epok以来的秒数)startTime,而startDate为NULL.如果用户仅提供开始日期,则数据库将格式存储在'startTime' nnnn-mm-ddstartDateNULL.startTime中.我有这种数据库结构,因为它更容易在世界各地显示时间,因为不同的时区有不同的夏令时.

我想选择在指定日期之后发生的事件.客户端计算机为服务器提供当天($unix)开头的UNIX时间戳和$date格式的日期()nnnn-mm-dd以选择正确的日期.

问题是,我不知道如何选择上面指定的那些日子.此解决方案不适用于我,即使它有效:

SELECT *
  FROM events
 WHERE startDate >= '$date'
   OR startTime >= '$unix'
Run Code Online (Sandbox Code Playgroud)

事情是我在某些行中提供了unix时间戳startTime,我也提供了日期startDate和其他原因我不想解释.因此,我不能使用上面的解决方案.

我需要某种在Where子句中包含IF语句的解决方案,如:

SELECT *
  FROM events
 WHERE IF(startTime = NULL, startDate >= '$date', startTime >= '$unix')
Run Code Online (Sandbox Code Playgroud)

我只是猜测这个解决方案.但这是对的吗?

zer*_*kms 8

WHERE (startTime IS NULL AND startDate >= '$date')
   OR (startTime IS NOT NULL AND startTime >= '$unix')
Run Code Online (Sandbox Code Playgroud)

  • @ Woho87:你永远不会有足够的NULL!;) (6认同)

Ken*_*wns 7

所有 SQL 方言都支持 CASE WHEN:

SELECT *
 FROM events
WHERE CASE WHEN startTime is null
           THEN startDate >= '$date'
           ELSE startTime >= '$unix'
Run Code Online (Sandbox Code Playgroud)