我正在开发一个日历应用程序.它以两种格式存储时间.该表包含以下列title, startDate, startTime.如果用户提供开始时间加上开始日期.数据库在列中存储UNIX时间戳(自UNIX epok以来的秒数)startTime,而startDate为NULL.如果用户仅提供开始日期,则数据库将格式存储在'startTime' nnnn-mm-dd中startDate和NULL.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)
我只是猜测这个解决方案.但这是对的吗?
WHERE (startTime IS NULL AND startDate >= '$date')
OR (startTime IS NOT NULL AND startTime >= '$unix')
Run Code Online (Sandbox Code Playgroud)
所有 SQL 方言都支持 CASE WHEN:
SELECT *
FROM events
WHERE CASE WHEN startTime is null
THEN startDate >= '$date'
ELSE startTime >= '$unix'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35794 次 |
| 最近记录: |