如何从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;