如何从SQL Server检索YYYY-MM-DD
格式的日期?我需要使用它才能与SQL Server 2000及更高版本一起使用。有没有一种简单的方法可以在SQL Server中执行此操作,或者在检索结果集之后以编程方式对其进行转换会更容易吗?
我已经在Microsoft Technet上阅读了CAST和CONVERT,但是没有列出我想要的格式,并且更改日期格式不是一种选择。
如何从SQL Server检索YYYY-MM-DD
格式的日期?我需要使用它才能与SQL Server 2000及更高版本一起使用。有没有一种简单的方法可以在SQL Server中执行此操作,或者在检索结果集之后以编程方式对其进行转换会更容易吗?
我已经在Microsoft Technet上阅读了CAST和CONVERT,但是没有列出我想要的格式,并且更改日期格式不是一种选择。
Answers:
SELECT CONVERT(char(10), GetDate(),126)
限制不需要的小时部分的varchar排的大小。
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
从SQL Server 2012开始(最初的问题是2000):
SELECT FORMAT(GetDate(), 'yyyy-MM-dd')
网上表格中列出了您需要的表格。
http://msdn.microsoft.com/zh-CN/library/aa226054(SQL.80).aspx
例如,尝试以下操作:
select convert(varchar,getDate(),120)
select convert(varchar(10),getDate(),120)
convert
带有格式说明符120 的函数将为您提供格式“ yyyy-MM-dd HH:mm:ss”,因此您只需将长度限制为10即可仅获取日期部分:
convert(varchar(10), theDate, 120)
但是,格式化日期通常最好在表示层而不是数据库或业务层中进行。如果返回从数据库格式化的日期,则客户端代码如果需要对其进行任何计算,则必须再次将其解析为日期。
C#中的示例:
theDate.ToString("yyyy-MM-dd")
另一种方式
CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime))
replace(convert(varchar, getdate(), 111), '/','-')
也可以在不“砍掉任何东西”的情况下进行欺骗。
如果有人想这样做的其他方式,发现这一点。
select convert(datetime, '12.09.2014', 104)
这会将德语日期格式的字符串转换为datetime对象。
为什么是104?看到这里:http : //msdn.microsoft.com/en-us/library/ms187928.aspx
如果您想将其用作日期而不是varchar
之后的日期,请不要忘记将其转换回:
select convert(datetime,CONVERT(char(10), GetDate(),126))
我不确定为什么上面的答案中最简单的方法被忽略/省略了:
SELECT FORMAT(GetDate(),'yyyy-MM-dd');--= 2020-01-02
SELECT FORMAT(GetDate(),'dd MMM yyyy HH:mm:ss');-- = 02 Jan 2020 08:08:08
我喜欢第二种语言,因为无论您使用哪种语言,您都可以了解它的日期!
当您将其发送到保存过程时,无论计算机中设置了哪种区域格式,SQL Server都会始终“理解”它-我始终使用全年(yyyy),月份名称(MMM)和24小时格式(大写HH)在我的编程中花了一个小时。
SELECT CONVERT(NVARCHAR(20), GETDATE(), 23)
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))
对每个convert / cast函数使用CASE语句始终对我有用:
请用表名替换tableXXXXY,并用该表中datetime字段的名称替换issueDate_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
希望这会有所帮助。查伯特。
此解决方案对我有效,简单有效(也有126个)
CONVERT(NVARCHAR(MAX), CAST(GETDATE() as date), 120)
如果您的原始日期格式都弄乱了,请尝试以下方法:
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;