如何从TSQLdate时间字段以YYYY-MM-DD格式获取date?

如何从YYYY-MM-DD格式的SQL Server中检索date? 我需要这个和SQL Server 2000一起工作。 有没有一种简单的方法来在SQL Server中执行此操作,或者在检索结果集后以编程方式进行转换会更容易吗?

我已经阅读了Microsoft Technet上的CAST和CONVERT ,但是我想要的格式没有列出,并且不能更改date格式。

SELECT CONVERT(char(10), GetDate(),126) 

限制你不需要的小时部分的varchar的大小。

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

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

您所在的表单在书籍在线文档中列出。

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

例如,请尝试以下操作:

 select convert(varchar,getDate(),120) select convert(varchar(10),getDate(),120) 
 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 

具有格式说明符120的convert函数会给你格式“yyyy-MM-dd HH:mm:ss”,所以你只需要限制长度为10就可以得到date部分:

 convert(varchar(10), theDate, 120) 

但是,格式化date通常更适合于表示层,而不是数据库或业务层。 如果您从数据库中返回格式化的date,那么如果客户端代码需要对其进行任何计算,则必须再次将其parsing为date。

C#中的示例:

 theDate.ToString("yyyy-MM-dd") 

对于YYYYMMDD尝试

 select convert(varchar,getDate(),112) 

我只testing了SQLServer2008。

换一种方式

 CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime)) 
 replace(convert(varchar, getdate(), 111), '/','-') 

也不会“砍掉任何东西”。

如果有人想这样做,find它。

 select convert(datetime, '12.09.2014', 104) 

这将德语date格式的string转换为date时间对象。

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

对于那些也想要时间部分(我做),以下片段可能会有所帮助

 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 

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

CONVERT (varchar(10), DTvalue, 126)

这会缩短时间。 你的需求是yyyy-mm-dd,意味着它必须是一个string数据types和date时间。

坦率地说,除非你有充分的理由不这样做,否则我会这样做。

如果你想在日后使用它作为date而不是一个varchar ,不要忘记把它转换回来:

 select convert(datetime,CONVERT(char(10), GetDate(),126)) 

SELECT CONVERT(NVARCHAR(20), GETDATE(), 23)

我会用:

 CONVERT(char(10),GETDATE(),126) 
 SELECT Code,Description FROM TABLE -- This will Include only date part of 14th March 2010. Any date with date companents will not be considered. WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, '2010-02-14', 126) AND ToDate <= DATEADD(dd, 1, CONVERT(DATETIME, '2010-03-14', 126)) -- This will Include the whole day of 14th March 2010 --WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, '2010-02-14', 126) AND ToDate < DATEADD(dd, 1, CONVERT(DATETIME, '2010-03-14', 126)) 

126的BOL描述有点混乱(从来没有find“T”的解释)。

对每个convert / cast函数使用CASE语句总是适用于我:

请用您的表名replacetableXXXXY,然后在该表中使用datetime字段的名称发出DATE_DAT:

 SELECT issueDate_dat, CONVERT(varchar, DATEPART(yyyy, issuedate_dat)) AS issueDateYYYY , CASE WHEN (len(CONVERT(varchar, DATEPART(mm, issuedate_dat))) < 2) THEN '0' +CONVERT(varchar, DATEPART(mm, issuedate_dat)) ELSE CONVERT(varchar, DATEPART(mm, issuedate_dat)) END AS issueDateMM , CASE WHEN (len(CONVERT(varchar, DATEPART(dd, issuedate_dat))) <2) THEN '0' +CONVERT(varchar, DATEPART(dd, issuedate_dat)) ELSE CONVERT(varchar, DATEPART(dd, issuedate_dat)) END AS issueDateDD FROM tableXXXXY 

希望这是有帮助的。 chagbert。

这个解决scheme适合我,简单有效(也有126个)

 CONVERT(NVARCHAR(MAX), CAST(GETDATE() as date), 120) 

如果您的源date格式全部搞乱,请尝试以下内容:

 select convert(nvarchar(50),year(a.messedupDate))+'-'+ (case when len(convert(nvarchar(50),month(a.messedupDate)))=1 then '0'+ convert(nvarchar(50),month(a.messedupDate))+'-' else convert(nvarchar(50),month(a.messedupDate)) end)+ (case when len(convert(nvarchar(50),day(a.messedupDate)))=1 then '0'+ convert(nvarchar(50),day(a.messedupDate))+'-' else convert(nvarchar(50),day(a.messedupDate)) end) from messytable a 
  IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true); cmdGetPaymentStatement.Parameters.AddWithValue("@pStartDate", DateTime.Parse("22/12/2017", culture, System.Globalization.DateTimeStyles.AssumeLocal)).IsNullable = true;