如何从 SQL 中的日期时间中删除时间

Posted

技术标签:

【中文标题】如何从 SQL 中的日期时间中删除时间【英文标题】:How to remove time from datetime in SQL 【发布时间】:2019-07-05 23:40:03 【问题描述】:

这是我的查询:

select date(datetime) as dates,
        user_id,
        sum(CASE When status='completed' Then 1 Else 0 End ) as completed,
        sum(CASE When status='incompleted' Then 1 Else 0 End ) as incompleted,
        sum(CASE When status!='' Then 1 Else 0 End ) as total 
from routine_streak 
where user_id ='"+user_id+"' 
and datetime  between '"+start+"' and '"+end+"' 
group by user_id,date(datetime)

它会给出这样的输出:

"datetime": "2019-01-30T00:00:00.000Z

不过我想要这样:

"datetime": "2019-01-30"

【问题讨论】:

psql(团队 sql) 那个查询不会给你任何东西,它有一个语法错误 您在问题中发布的查询在多种情况下均无效(date(datetime) 后面的冒号不得存在,末尾的括号应删除) 能否请您在此查询中告诉我如何使用 join 从 user_id 获取用户名 学习使用参数! 【参考方案1】:

使用下面给出的查询

<?php 
var str = "select DATE_FORMAT(datetime,'%y-%m-%d') as dates,from routine_streak where user_id='183' group by user_id)"; 
?>

【讨论】:

不工作它在我的 api 响应中显示内部服务器错误 nidhi,提供的语法是 mysql 请告诉我们您使用的是哪个数据库? 我在节点 js 中使用 psql 查询【参考方案2】:

请尝试。

 SELECT
      date_format(datetime, '%Y-%m-%d') AS dates,
      user_id,
      sum(CASE WHEN status = 'completed'
        THEN 1
          ELSE 0 END) AS completed,
      sum(CASE WHEN status = 'incompleted'
        THEN 1
          ELSE 0 END)  AS incompleted,
      sum(CASE WHEN status != ''
        THEN 1
          ELSE 0 END)  AS total
    FROM routine_streak
    WHERE user_id = '"+user_id+"'
          AND datetime BETWEEN '"+start+"' AND '"+end+"'
    GROUP BY user_id, dates

参考https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

【讨论】:

【参考方案3】:

使用 cast 函数仅获取日期部分

cast(datetime as date)

【讨论】:

【参考方案4】:

这是SQL SERVER

的答案
select convert(varchar, getdate(), 111)

输出将符合预期。

【讨论】:

以上是关于如何从 SQL 中的日期时间中删除时间的主要内容,如果未能解决你的问题,请参考以下文章

如何从 tsql (sql 2005) 中的 utc 日期时间计算本地日期时间?

如何在 SQL 中获取记录删除日期?

从熊猫数据框中的日期时间中删除时间戳

从日期中删除存储在数组中的整个数据的时间

如何从同一列sql中分离日期和时间

如何从 SQL (T-SQL) 中的日期组件创建日期?