AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 173241
Accepted
tfenwick11
tfenwick11
Asked: 2017-05-11 06:37:40 +0800 CST2017-05-11 06:37:40 +0800 CST 2017-05-11 06:37:40 +0800 CST

SQL Server 2000 - 使用 DATEADD 和 DATEDIFF 从 datetime 列结果中剥离时间是否仍然返回带有时间的结果?

  • 772

我知道有几篇关于从日期时间列中删除时间部分的帖子。并且每个人都建议 DATEADD 和 DATEDIFF 方法最适合性能,个人不应该采用将日期值转换/转换为 varchar 的过程。所以我想利用下面的函数,但我不明白为什么我收到的结果仍然有与之关联的时间值,尽管时间全为零?

提供有关我为什么要了解此结果的更多信息。我有一个存储过程,我希望指定以下内容:

DECLARE @DateShippedBegin DATETIME
DECLARE @DateShippedEnd DATETIME
SET @DateShippedBegin = dateadd(dd, datediff(dd, 0, @DateShipped), 0)
SET @DateShippedEnd = dateadd(dd, datediff(dd, 0, @DateShipped) + 1, 0)

WHERE O.date_shipped >= @DateShippedBegin and O.date_shipped < @DateShippedEnd

但是,当我使用基本日期格式执行该程序时,我没有收到任何结果,因此试图了解我的程序采用的最佳概念。

Select DATEADD(dd, DATEDIFF(dd, 0, Getdate()), 0) from orders where order_no = 
'1247401'

起始日期值示例:

2017-05-010 08:40:18.287

查询结果示例:

2017-05-10 00:00:00.000
sql-server-2000 t-sql
  • 2 2 个回答
  • 2710 Views

2 个回答

  • Voted
  1. Best Answer
    RDFozz
    2017-05-11T06:50:25+08:002017-05-11T06:50:25+08:00

    一datetime列总是包含一个时间部分。如果您将datetime列设置为“2017-05-10”,它将显示为2017-05-10 00:00:00.

    当您想将“仅日期”与datetime列进行比较时,请将两个日期的时间部分设置为午夜。这通常被称为“删除”时间部分。

    如果您想从输出中消除时间部分,有多种选择。您可以通过使用 . 拉出各个字段,以您希望的任何格式构建日期DATEPART。然而,最常见的是,我看到人们将日期转换为字符串并删除时间部分:

    SELECT CONVERT(varchar(10), GETDATE(), 120);
    

    请注意,CONVERT此处用于格式化输出的日期值,而不是为了进行比较而更改它。我仍然会像你在代码中那样做。

    • 6
  2. John Eisbrener
    2017-05-11T06:51:42+08:002017-05-11T06:51:42+08:00

    原因是该字段仍然是DATETIME数据类型。如果您希望输出仅显示日期,则需要将输出转换为varchar(或char在本例中),例如:

    Select CONVERT(CHAR(10), DATEADD(dd, DATEDIFF(dd, 0, Getdate()), 0), 101) from orders where order_no = 
    '1247401'
    
    • 1

相关问题

  • MS SQL:使用计算值计算其他值

  • 如何判断 SQL Server 数据库是否仍在使用?

  • 将 SQL Server 2000 移动到 SQL Server 2005 时出错 NOLOCK 错误

  • 实施 PIVOT 查询

  • SQL Server 2000:列出并禁用所有触发器

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve