如何以YYYY-MM-DD
格式从SQL Server检索日期?我需要这个与SQL Server 2000及更高版本一起工作。有没有一种简单的方法在SQL Server中执行此操作,还是在检索结果集后以编程方式更容易地进行转换?
我已阅读Microsoft Technet上的CAST and CONVERT,但未列出我想要的格式,并且无法更改日期格式。
答案 0 :(得分:390)
SELECT CONVERT(char(10), GetDate(),126)
限制您不想要的小时部分的varchar印章的大小。
答案 1 :(得分:93)
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
答案 2 :(得分:35)
您所使用的表格列于图书在线文档中。
http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx
例如,请尝试以下操作:
select convert(varchar,getDate(),120)
select convert(varchar(10),getDate(),120)
答案 3 :(得分:26)
格式说明符为120的convert
函数将为您提供格式“yyyy-MM-dd HH:mm:ss”,因此您只需将长度限制为10即可获得日期部分:
convert(varchar(10), theDate, 120)
但是,格式化日期通常在表示层而不是在数据库或业务层中更好。如果您返回格式化数据库的日期,那么如果客户端代码需要对其进行任何计算,则必须再次将其解析为日期。
C#中的示例:
theDate.ToString("yyyy-MM-dd")
答案 4 :(得分:14)
对于YYYYMMDD,请尝试
select convert(varchar,getDate(),112)
我只在SQLServer2008上测试过。
答案 5 :(得分: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
答案 6 :(得分:6)
如果有人想要以其他方式这样做,就会发现这一点。
select convert(datetime, '12.09.2014', 104)
这会将德语日期格式的字符串转换为日期时间对象。
为什么选择104?请参见此处:http://msdn.microsoft.com/en-us/library/ms187928.aspx
答案 7 :(得分:6)
replace(convert(varchar, getdate(), 111), '/','-')
如果不“切断任何东西”,也会做出伎俩。
答案 8 :(得分:6)
另一种方式......
CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime))
答案 9 :(得分:5)
在您的演员和转换链接中,使用样式126:
CONVERT (varchar(10), DTvalue, 126)
这会截断时间。您需要在yyyy-mm-dd中使用它意味着它必须是字符串数据类型和日期时间。
坦率地说,除非你有充分的理由不这样做,否则我会在客户端上这样做。
答案 10 :(得分:5)
我不确定为什么上面的答案中最简单的方法被忽略/省略了:
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小时格式(在我的编程中花了一个小时。
答案 11 :(得分:4)
如果您想在之后再次使用它作为日期而不是varchar
,请不要忘记将其转换回来:
select convert(datetime,CONVERT(char(10), GetDate(),126))
答案 12 :(得分:2)
SELECT CONVERT(NVARCHAR(20), GETDATE(), 23)
答案 13 :(得分:1)
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))
答案 14 :(得分:1)
我会用:
CONVERT(char(10),GETDATE(),126)
答案 15 :(得分:1)
从SQL Server 2008,您可以执行此操作:CONVERT(date,getdate())
答案 16 :(得分:1)
您也可以使用。这是通过使用新的数据类型DATE
。可能无法在所有以前的版本中使用,但是大大简化了以在更高版本中使用。
SELECT CAST(getdate() AS DATE)
SELECT LEFT(CAST(getdate() AS DATE), 7)
答案 17 :(得分:1)
如果您希望日期用斜杠分隔,似乎不需要做任何奇怪的事情。 只需使用反斜杠将其转义即可。否则,您将得到一个圆点。
SELECT FORMAT(GETDATE(),'yyyy\/MM');
在SQL Server 2016上测试
答案 18 :(得分:0)
对每个转换/强制转换函数使用CASE语句总是对我有用:
请将tableXXXXY替换为您的表名,并将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
希望这有用。 chagbert。
答案 19 :(得分:0)
如果您的源日期格式全部搞砸了,请尝试以下内容:
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
答案 20 :(得分:0)
此解决方案对我有用,简单有效(也有126)
CONVERT(NVARCHAR(MAX), CAST(GETDATE() as date), 120)
答案 21 :(得分:0)
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;
答案 22 :(得分:-1)
由于字符串处理非常昂贵,而FORMAT则更是如此,我很惊讶Asher / Aaron Dietz的响应不会更高,甚至不是最高;问题是要寻找ISO 8601日期,而不是专门要求将其作为字符串类型。
最有效的方法是以下任何一种方法(我已经提供了Asher / Aaron Dietz为完整起见已经提出的答案):
所有版本
try {
const result = await window.myIpcRenderer.invoke("myValidChannel", data)
} catch (err) {
console.log(err)
}
2008及更高版本
select cast(getdate() as date)
select convert(date, getdate())
等效于ANSI SQL的2008及更高版本
select convert(date, current_timestamp)
参考:
https://sqlperformance.com/2015/06/t-sql-queries/format-is-nice-and-all-but
https://en.wikipedia.org/wiki/ISO_8601
https://www.w3schools.com/sql/func_sqlserver_current_timestamp.asp