如何从TSQL日期时间字段获取YYYY-MM-DD格式的日期?

Kin*_*nze 252 t-sql sql-server

如何从YYYY-MM-DD格式的SQL Server中检索日期?我需要这个与SQL Server 2000及更高版本一起工作.有没有一种简单的方法在SQL Server中执行此操作,还是在检索结果集后以编程方式更容易地进行转换?

我已阅读Microsoft Technet上的CAST和CONVERT,但未列出我想要的格式,并且不能更改日期格式.

Dar*_*ler 407

SELECT CONVERT(char(10), GetDate(),126)
Run Code Online (Sandbox Code Playgroud)

限制您不想要的小时部分的varchar印章的大小.

  • 这篇文章出现在谷歌转换为YYYYMMDD - 所以一个是:CONVERT(char(10),GetDate(),112) (51认同)
  • `126`表示[ISO8601](http://msdn.microsoft.com/en-us/library/ms187928.aspx). (23认同)
  • 输出样式的整数代码列表:http://msdn.microsoft.com/en-us/library/ms187928.aspx (4认同)
  • 不,但有些客户有固定长度的问题. (3认同)

小智 104

SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM

SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy – 10/02/2008                  

SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02           

SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy

SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy

SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy

SELECT convert(varchar, getdate(), 106) -- dd mon yyyy

SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy

SELECT convert(varchar, getdate(), 108) -- hh:mm:ss

SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM)

SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy

SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd

SELECT convert(varchar, getdate(), 112) -- yyyymmdd

SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm

SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h)

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm

SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
Run Code Online (Sandbox Code Playgroud)


Ign*_*nia 101

SQL Server 2012开始(原始问题是针对2000):

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


Joh*_*som 35

您所使用的表格列在联机书籍文档中.

http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx

例如,尝试以下操作:

select convert(varchar,getDate(),120)
select convert(varchar(10),getDate(),120)
Run Code Online (Sandbox Code Playgroud)

  • 如果采用默认值,在这种情况下,您将获得时间值 - 格式120的整个格式为'yyyy-mm-dd hh:mi:ss'.通过明确声明长度,它将被修剪为您在原始音符中指定的格式 - 'yyyy-mm-dd'. (4认同)

Guf*_*ffa 26

convert格式说明符120 的函数将为您提供格式"yyyy-MM-dd HH:mm:ss",因此您只需将长度限制为10即可获得日期部分:

convert(varchar(10), theDate, 120)
Run Code Online (Sandbox Code Playgroud)

但是,格式化日期通常在表示层而不是数据库或业务层中更好.如果返回从数据库格式化的日期,那么如果客户端代码需要对其进行任何计算,则必须再次将其解析为日期.

C#中的示例:

theDate.ToString("yyyy-MM-dd")
Run Code Online (Sandbox Code Playgroud)


Los*_*nos 14

对于YYYYMMDD试试

select convert(varchar,getDate(),112)
Run Code Online (Sandbox Code Playgroud)

我只在SQLServer2008上测试过.


小智 6

另一种方式......

CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime)) 
Run Code Online (Sandbox Code Playgroud)


Raf*_*off 6

replace(convert(varchar, getdate(), 111), '/','-')
Run Code Online (Sandbox Code Playgroud)

如果没有"砍掉任何东西",也会做出诡计.


小智 6

对于那些想要时间部分的人(我做过),下面的代码片段可能有所帮助

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm
SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
                              --example -- 2008-10-02T10:52:47.513
Run Code Online (Sandbox Code Playgroud)


Jen*_*lly 6

如果有人想以相反的方式做到这一点并发现这一点.

select convert(datetime, '12.09.2014', 104)
Run Code Online (Sandbox Code Playgroud)

这会将德语日期格式的字符串转换为日期时间对象.

为什么104?请参见此处:http://msdn.microsoft.com/en-us/library/ms187928.aspx


小智 6

您也可以使用。这是通过使用新的数据类型来实现的DATE。可能不适用于所有以前的版本,但在以后的版本中大大简化了使用。

SELECT CAST(getdate() AS DATE)
SELECT LEFT(CAST(getdate() AS DATE), 7)
Run Code Online (Sandbox Code Playgroud)


Han*_*mbo 6

我不确定为什么在上面的答案中忽略/省略了最简单的方法:

SELECT FORMAT(GetDate(),'yyyy-MM-dd');--= 2020-01-02

SELECT FORMAT(GetDate(),'dd MMM yyyy HH:mm:ss');-- = 02 Jan 2020 08:08:08
Run Code Online (Sandbox Code Playgroud)

我更喜欢第二个,因为无论你说哪种语言,你都会明白它是什么日期!

此外,当您将其发送到保存程序时,SQL Server 总是“理解”它,无论计算机中设置了哪种区域格式 - 我总是使用全年 (yyyy)、月份名称 (MMM) 和 24 小时格式(大写 HH)在我的编程中一个小时。


gbn*_*gbn 5

在您的转换和转换链接中,使用样式126:

CONVERT (varchar(10), DTvalue, 126)

这会截断时间.您需要在yyyy-mm-dd中使用它意味着它必须是字符串数据类型和日期时间.

坦率地说,除非你有充分的理由不这样做,否则我会在客户端做到这一点.