如何从SQL Server中检索YYYY-MM-DD格式的日期?我需要这个工作与SQL Server 2000及更高。是否有一个简单的方法来执行这在SQL Server或它会更容易转换后,我检索的结果集?

我已经阅读了微软Technet上的CAST和CONVERT,但我想要的格式没有列出,改变日期格式也不是一个选项。


当前回答

似乎没有必要做任何奇怪的事情,如果你想让你的约会被斜杠分开。 只需用反斜杠转义即可。否则你就会得到一个点。

SELECT FORMAT(GETDATE(),'yyyy\/MM');  

在SQL Server 2016上测试

其他回答

Select convert (nvarchar (20), getdate (), 23)

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

CONVERT (varchar(10), DTvalue, 126)

这缩短了时间。您要求它在yyyy-mm-dd中,这意味着它必须是字符串数据类型和日期时间。

坦率地说,除非你有充分的理由不这么做,否则我会在客户端上这么做。

使用每个转换/强制转换函数的CASE语句总是为我工作:

请将tableXXXXY替换为您的表名,并将issueDate_dat替换为该表中的datetime字段的名称:

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。

由于字符串处理是昂贵的,FORMAT更是如此,我很惊讶Asher/Aaron Dietz的响应不是更高,如果不是顶级的;问题是寻找ISO 8601日期,并没有特别要求它作为字符串类型。

最有效的方法可能是以下任何一种(为了完整起见,我已经包括了Asher/Aaron Dietz提出的答案):

所有版本

select  cast(getdate() as date)
select  convert(date, getdate())

2008年及以上

select  convert(date, current_timestamp)

ANSI SQL等效2008和更高

select  cast(current_timestamp as date)

引用:

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

https://learn.microsoft.com/en-us/sql/t-sql/functions/current-timestamp-transact-sql?view=sql-server-ver15

 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;