SELECT GETDATE()

回报: 2008-09-22 15:24:13.790

我希望该日期部分没有时间部分: 2008-09-22 00:00:00.000

我该怎么办?


#1楼

尝试这个:

SELECT CONVERT(VARCHAR(10),GETDATE(),111)

上面的声明将您当前的格式转换为YYYY/MM/DD ,请参考此链接以选择您喜欢的格式。


#2楼

SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 101))

#3楼

SQL Server 2008及更高版本上,您应该CONVERT为最新版本:

SELECT CONVERT(date, getdate())

在旧版本上,您可以执行以下操作:

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))

例如

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

给我

2008-09-22 00:00:00.000

优点:

  • 无需varchar <-> datetime转换
  • 无需考虑locale

正如迈克尔建议的

使用此变体: SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)

select getdate()SELECT DATEADD(hh, DATEDIFF(hh, 0, getdate()), 0)
SELECT DATEADD(hh, 0, DATEDIFF(hh, 0, getdate()))SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, getdate()))SELECT DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0)
SELECT DATEADD(mm, 0, DATEDIFF(mm, 0, getdate()))SELECT DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0)
SELECT DATEADD(yy, 0, DATEDIFF(yy, 0, getdate()))

输出:

2019-04-19 08:09:35.5572019-04-19 08:00:00.000
4763-02-17 00:00:00.0002019-04-19 00:00:00.000
2019-04-19 00:00:00.0002019-04-01 00:00:00.000
1903-12-03 00:00:00.0002019-01-01 00:00:00.000
1900-04-30 00:00:00.000

#4楼

您可以使用CONVERT函数仅返回日期。 请参阅下面的链接:

SQL Server 2000中的日期和时间处理

转换并转换

使用convert函数的语法为:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

#5楼

SELECT DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0)SELECT DATEADD(DAY, 0, DATEDIFF(DAY,0, GETDATE()))SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 101))

编辑:前两个方法基本相同,并执行转换为varchar方法。


#6楼

使用FLOOR()-仅削减时间部分。

SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)

#7楼

DATEADD和DATEDIFF优于转换为varchar。 这两个查询都具有相同的执行计划,但是执行计划主要是关于数据访问策略的,并不总是揭示执行所有步骤所花费的CPU时间所隐含的成本。 如果两个查询都针对具有数百万行的表运行,则使用DateDiff的CPU时间可能接近“转换CPU时间”的1/3!

要查看查询的执行计划:

set showplan_text on
GO

DATEADD和DATEDIFF都将执行CONVERT_IMPLICIT。

虽然CONVERT解决方案更简单,更容易阅读一些,其速度较慢 。 无需回退到日期时间(这是由服务器隐式完成的)。 之后,DateAdd的DateDiff方法中也没有真正的需求,因为整数结果也将隐式转换回datetime。


从DatesTable中选择转换(varchar,MyDate,101)

  |--Compute Scalar(DEFINE:([Expr1004]=CONVERT(varchar(30),[TEST].[dbo].[DatesTable].[MyDate],101)))|--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

从DatesTable中选择SELECT DATEADD(dd,0,DATEDIFF(dd,0,MyDate))

  |--Compute Scalar(DEFINE:([Expr1004]=dateadd(day,(0),CONVERT_IMPLICIT(datetime,datediff(day,'1900-01-01 00:00:00.000',CONVERT_IMPLICIT(datetime,[TEST].[dbo].[DatesTable].[MyDate],0)),0))))|--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

使用FLOOR()作为@digi建议的性能接近于DateDiff,但不建议将其转换为float和back的datetime数据类型并不总是产生原始值。

记住伙计们:不要相信任何人。 查看性能统计信息,然后自己进行测试!

测试结果时请多加注意。 选择许多行给客户端将隐藏性能差异,因为通过网络发送行比执行计算花费的时间更长。 因此,请确保所有行的工作均由服务器完成,但没有行集发送给客户端。

对于缓存优化何时会影响查询,有些人似乎感到困惑。 在同一批次或不同批次中运行两个查询对缓存没有影响。 因此,您既可以手动使缓存过期,也可以简单地多次运行查询。 查询2的任何优化也会影响后续查询,因此,如果您愿意,可以放弃执行1。

这是完整的测试脚本和性能结果 ,证明DateDiff比转换为varchar快得多。


#8楼

如果要使用CONVERT并获得与原始问题相同的输出,即yyyy-mm-dd,则使用CONVERT(varchar(10),[SourceDate as dateTime],121)与前面几个答案相同的代码,但是用破折号转换为yyyy-mm-dd的代码为121。

如果我可以使用肥皂盒一秒钟,那么这种格式就不属于数据层 ,这就是为什么直到SQL Server 2008才出现实际的datepart数据类型时,才没有愚蠢的高开销“技巧”是不可能的介绍。 在数据层中进行此类转换会极大地浪费DBMS的开销,但是更重要的是,第二次执行类似的操作之后,您基本上已经创建了内存中孤立的数据,我假设您将随后返回程序。 您不能将其放回另一个3NF +列中,也不能将其与键入的任何内容进行比较而不进行还原,因此,您所做的只是引入了故障点并删除了关系引用。

您应该始终将您的dateTime数据类型返回给调用程序,并在PRESENTATION层中进行必要的调整。 在将事物返回给调用者之前先进行转换,就从应用程序中消除了所有引用完整性的希望。 除非您进行某种手动还原,否则这将再次阻止UPDATE或DELETE操作,这又在不需要时将数据暴露于人为/代码/ gremlin错误。


#9楼

SQLServer 2008现在具有“日期”数据类型,该数据类型仅包含没有时间成分的日期。 使用SQLServer 2008及更高版本的任何人都可以执行以下操作:

SELECT CONVERT(date, GETDATE())

#10楼

为了获得指示的结果,我使用以下命令。

SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE()))

我希望这很有用。


#11楼

我认为这将适合您的情况:

CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate
//here date is obtained as 1990/09/25

#12楼

以日期格式返回

CAST(OrderDate AS日期)

上面的代码将在sql server 2010中工作

它将在2013年12月12日返回

对于SQL Server 2012,请使用以下代码

CONVERT(VARCHAR(10), OrderDate , 111)

#13楼

如果您需要将结果作为varchar ,则应通过

SELECT CONVERT(DATE, GETDATE()) --2014-03-26
SELECT CONVERT(VARCHAR(10), GETDATE(), 111) --2014/03/26

上面已经提到了

如果您需要日期和时间格式的结果,则应使用以下任何查询

  1.  SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 111)) AS OnlyDate 

    2014-03-26 00:00:00.000

  2.  SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 112)) AS OnlyDate 

    2014-03-26 00:00:00.000

  3.  DECLARE @OnlyDate DATETIME SET @OnlyDate = DATEDIFF(DD, 0, GETDATE()) SELECT @OnlyDate AS OnlyDate 

    2014-03-26 00:00:00.000


#14楼

您可以将以下用于日期部分并格式化日期:

DATENAME =>返回代表指定日期中指定日期部分的字符串

DATEADD => DATEPART()函数用于返回日期/时间的单个部分,例如年,月,日,小时,分钟等。

DATEPART =>返回一个整数,该整数表示指定日期的指定日期部分。

CONVERT() => CONVERT()函数是将一个数据类型的表达式转换为另一种数据类型的通用函数。 CONVERT()函数可用于以不同格式显示日期/时间数据。


#15楼

 Convert(nvarchar(10), getdate(), 101) --->  5/12/14Convert(nvarchar(12), getdate(), 101) --->  5/12/2014

#16楼

为什么不使用DATE_FORMAT(your_datetiem_column,'%d-%m-%Y')?

例如: select DATE_FORMAT( some_datetime_column, '%d-%m-%Y' ) from table_name

您可以通过重新排列'%d-%m-%Y'部分来更改m,d和year的顺序


#17楼

DECLARE @yourdate DATETIME = '11/1/2014 12:25pm'
SELECT CONVERT(DATE, @yourdate)

#18楼

即使使用古老的MSSQL Server 7.0,此处的代码(此链接提供 )也使我能够获取当时要查找的任何日期格式:

PRINT '1) Date/time in format MON DD YYYY HH:MI AM (OR PM): ' + CONVERT(CHAR(19),GETDATE())
PRINT '2) Date/time in format MM-DD-YY: ' + CONVERT(CHAR(8),GETDATE(),10)
PRINT '3) Date/time in format MM-DD-YYYY: ' + CONVERT(CHAR(10),GETDATE(),110)
PRINT '4) Date/time in format DD MON YYYY: ' + CONVERT(CHAR(11),GETDATE(),106)
PRINT '5) Date/time in format DD MON YY: ' + CONVERT(CHAR(9),GETDATE(),6)
PRINT '6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): ' + CONVERT(CHAR(24),GETDATE(),113)

它产生了以下输出:

1) Date/time in format MON DD YYYY HH:MI AM (OR PM): Feb 27 2015  1:14PM
2) Date/time in format MM-DD-YY: 02-27-15
3) Date/time in format MM-DD-YYYY: 02-27-2015
4) Date/time in format DD MON YYYY: 27 Feb 2015
5) Date/time in format DD MON YY: 27 Feb 15
6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): 27 Feb 2015 13:14:46:630

#19楼

我赞成以下未提及的内容:

DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))

它也不在乎本地或进行双转换-尽管每个'datepart'可能都在做数学运算。 因此,它可能比datediff方法要慢一些,但是对我来说,它要清晰得多。 特别是当我只想按年和月分组(将日期设置为1)时。


#20楼

Date(日期和时间字段)DATE_FORMAT(日期和时间,'%Y-%m-%d') 都只返回日期和时间中的日期


#21楼

我知道这很老,但是我看不到有人这样说。 据我所知,这是ANSI标准。

SELECT CAST(CURRENT_TIMESTAMP AS DATE)

如果Microsoft还可以支持ANSI标准CURRENT_DATE变量,那将是很好的。


#22楼

好的,尽管我来晚了:),这是另一种解决方案。

SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DATETIME)

结果

2008-09-22 00:00:00.000

如果您使用的是SQL Server 2012及更高版本,则可以使用FORMAT()函数,如下所示:

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd')

#23楼

如果要将结果分配给列或变量,请为其指定DATE类型,并且转换是隐式的。

DECLARE @Date DATE = GETDATE()   SELECT @Date   --> 2017-05-03

#24楼

日期:

SELECT CONVERT(date, GETDATE())
SELECT CAST(GETDATE() as date)

时间:

SELECT CONVERT(time , GETDATE() , 114)
SELECT CAST(GETDATE() as time)

#25楼

在SQL Server 2000上

CAST(
(STR( YEAR( GETDATE() ) ) + '/' +STR( MONTH( GETDATE() ) ) + '/' +STR( DAY( GETDATE() ) )
)
AS DATETIME)

#26楼

从SQL SERVER 2012开始,您可以执行以下操作:

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd 00:00:00.000')


#27楼

如果您使用的是SQL Server 2012或更高版本

使用Format()函数。

SQL Server已经有多种答案和格式设置类型。 但是大多数方法在某种程度上是模棱两可的,您将很难记住与特定日期格式有关的格式类型或函数的数字。 这就是为什么在下一版本的SQL Server中会有更好的选择。

FORMAT ( value, format [, culture ] )

文化选项非常有用,因为您可以根据观众指定日期。

您必须记住d(用于小图案)和D(用于长图案)。

1.“ d”-短日期模式。

2009-06-15T13:45:30 -> 6/15/2009 (en-US)
2009-06-15T13:45:30 -> 15/06/2009 (fr-FR)
2009-06-15T13:45:30 -> 2009/06/15 (ja-JP)

2.“ D”-长日期模式。

2009-06-15T13:45:30 -> Monday, June 15, 2009 (en-US)
2009-06-15T13:45:30 -> 15 июня 2009 г. (ru-RU)
2009-06-15T13:45:30 -> Montag, 15. Juni 2009 (de-DE)

查询中的更多示例。

DECLARE @d DATETIME = '10/01/2011';
SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result',FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result',FORMAT ( @d, 'd', 'de-de' ) AS 'German Result',FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result'; SELECT FORMAT ( @d, 'D', 'en-US' ) AS 'US English Result',FORMAT ( @d, 'D', 'en-gb' ) AS 'Great Britain English Result',FORMAT ( @d, 'D', 'de-de' ) AS 'German Result',FORMAT ( @d, 'D', 'zh-cn' ) AS 'Chinese (Simplified PRC) Result';US English Result Great Britain English Result  German Result Simplified Chinese (PRC) Result
----------------  ----------------------------- ------------- -------------------------------------
10/1/2011         01/10/2011                    01.10.2011    2011/10/1US English Result            Great Britain English Result  German Result                    Chinese (Simplified PRC) Result
---------------------------- ----------------------------- -----------------------------  ---------------------------------------
Saturday, October 01, 2011   01 October 2011               Samstag, 1. Oktober 2011        2011年10月1日

如果需要更多格式,可以转到:

  1. 标准日期和时间格式字符串
  2. 自定义日期和时间格式字符串

#28楼

只需执行以下操作即可:

SELECT CONVERT(date, getdate())
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

输出为:

2008-09-22 00:00:00.000

或者干脆像这样:

SELECT CONVERT (DATE, GETDATE()) 'Date Part Only'

结果:

Date Part Only
--------------
2013-07-14

#29楼

如果使用SQL 2008及更高版本:

select cast(getdate() as date)

#30楼

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),103) --21/09/2011SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),101) --09/21/2011SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),111) --2011/09/21SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),107) --Sep 21, 2011

如何仅从SQL Server DateTime数据类型返回日期相关推荐

  1. 揭密SQL Server DATETIME数据类型

    看完这篇文章的第一感觉是,虽然对于日期类型数据使用得很算顺利,不过作者 提到的一些东西还真不知道.有时候在应用上,不觉得比老外差到那里去.但是, 老外的一个优良习惯细扣概念并进行实证检验:而我们的习惯 ...

  2. 【转贴】揭密SQL Server DATETIME数据类型

    原文出处:http://blog.csdn.net/zk911/archive/2005/11/23/535432.aspx 作者:zk911 看完这篇文章的第一感觉是,虽然对于日期类型数据使用得很算 ...

  3. SQL Server datetime数据类型设计与优化误区

    http://www.searchdatabase.com.cn/showcontent_43301.htm

  4. Sql Server之数据类型详解

      数据类型是一种属性,用于指定对象可保存的数据的类型,SQL Server中支持多种数据类型,包括字符类型.数值类型以及日期类型等.数据类型相当于一个容器,容器的大小决定了装的东西的多少,将数据分为 ...

  5. sql 根据日期模糊查询SQL Server dateTime类型 模糊查询

    曾经遇到这样的情况,在数据库的Meeting表中有PublishTime (DateTime,8)字段,用来存储一个开会时间,在存入时由于要指明开会具体时间,故格式为yyyy-mm-dd hh:mm: ...

  6. 【转载】SQL Server dateTime类型 模糊查询

    日期格式的like模糊查询真的好怪,在一个项目中,我试了很多种查法: select * from T where sendTime like '%2007_12_%'    可以查询2007年12月的 ...

  7. SQL Server常见数据类型介绍

    数据表是由多个列组成,创建表时必须明确每个列的数据类型,以下列举SQL Server常见数据类型的使用规则,方便查阅 Character 字符串: 数据类型 描述 存储 char(n) 固定长度的字符 ...

  8. SQL Server的数据类型

    每种语法都有属于自己的数据类型,数据类型也分很多种.今天我就来好好说说SQL Server的数据类型. SQL Server包含了Character字符串.Unicode字符串.Binary类型.Nu ...

  9. MS SQL Server中的CONVERT日期格式化大全

    來源:http://www.knowsky.com/345490.html CONVERT 将某种数据类型的表达式显式转换为另一种 数据类型.由于某些需求经常用到取日期格式的不同.现以下可在 SQL ...

最新文章

  1. 《OpenStack云计算实战手册(第2版)》——导读
  2. Anroid基础建设之View,Window,Activity
  3. 输入一个正整数,求它各位数的数字之和
  4. javascript闭包_JavaScript闭包教程–带有JS闭包示例代码
  5. php querystring使用,node.js中的querystring.parse方法使用说明_node.js
  6. idhttp返回乱码_HTTP客户端POST方式中文编码(乱码)解决方案(转)
  7. Java PipedOutputStream connect()方法与示例
  8. 【物流选址】基于matlab粒子群算法求解多物流中心选址问题【含Matlab源码 1458期】
  9. SpringCloud 微服务视频教程
  10. 计算机网络教程第五版|微课版 - 第二章 物理层 - 重点概念
  11. python爬虫豆瓣评论_Python爬虫实战:分析《战狼2》豆瓣影评
  12. 人人都是产品经理(善用用户反馈——浅谈用户反馈数据的处理)
  13. 如何在Axure中使用Iconfont图标字体
  14. IIS配置php+soap
  15. 为什么使用vi /etc/sysconfig/network-scripts/ifcfg-ens33打开的编辑器是空的?
  16. android官方上拉加载,Android-RecycleView上拉加载更多
  17. verilog状态机
  18. POJ2187 Beauty Contest(凸包+对踵点对求解)
  19. sql server中字符集和排序规则到底什么关系
  20. 今日份Ps练习 | 剪纸效果

热门文章

  1. Android 使用RxJava--基础篇
  2. 【Java基础】容器
  3. 【剑指offer-Java版】24二叉搜索树后序遍历序列
  4. 【剑指offer-Java版】14调整数组顺序使奇数位于偶数前面
  5. 数据如何从HBase读到MR
  6. wpf 加载本地html文件,c# – Wpf WebBrowser加载javascript
  7. CentOS7 配置Supervisor开机启动
  8. 创新课程管理系统数据库设计心得
  9. Java中常见的几种类型转换
  10. HDu 3449 (有依赖的01背包) Consumer