如何从TSQL日期时间字段获取YYYY-MM-DD格式的日期?

如何以 YYYY-MM-DD 格式从SQL Server检索日期?我需要这个与SQL Server 2000及更高版本一起工作 . 有没有一种简单的方法在SQL Server中执行此操作,还是在检索结果集后以编程方式更容易地进行转换?

我已阅读Microsoft Technet上的CAST and CONVERT,但我想要的格式不是't listed and changing the date format isn'一个选项 .

回答(21)

2 years ago

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

限制您不想要的小时部分的varchar印章的大小 .

2 years ago

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

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

2 years ago

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 years ago

您所使用的表格列在联机书籍文档中 .

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

例如,尝试以下操作:

select convert(varchar,getDate(),120)
select convert(varchar(10),getDate(),120)

2 years ago

具有格式说明符120的 convert 函数将为您提供格式"yyyy-MM-dd HH:mm:ss",因此您只需将长度限制为10即可仅获取日期部分:

convert(varchar(10), theDate, 120)

但是,格式化日期通常在表示层而不是数据库或业务层中更好 . 如果返回从数据库格式化的日期,那么如果客户端代码需要对其进行任何计算,则必须再次将其解析为日期 .

C#中的示例:

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

2 years ago

对于YYYYMMDD试试

select convert(varchar,getDate(),112)

我只在SQLServer2008上测试过 .

2 years ago

另一种方式......

CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime))

2 years ago

replace(convert(varchar, getdate(), 111), '/','-')

如果没有“砍掉任何东西”,也会做出诡计 .

2 years ago

如果有人想要这样做 other way around 并找到这个 .

select convert(datetime, '12.09.2014', 104)

这会将德语日期格式的字符串转换为日期时间对象 .

Why 104? 见这里:http://msdn.microsoft.com/en-us/library/ms187928.aspx

2 years ago

对于那些想要时间部分的人(我做过),下面的代码片段可能有所帮助

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

2 years ago

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

CONVERT (varchar(10), DTvalue, 126)

这会截断时间 . 您需要在yyyy-mm-dd中使用它意味着它必须是字符串数据类型和日期时间 .

坦率地说,除非你有充分的理由不这样做,否则我会在客户端做到这一点 .

2 years ago

如果您想在之后再次使用它作为日期而不是 varchar ,请不要忘记将其转换回来:

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

2 years ago

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

2 years ago

我会用:

CONVERT(char(10),GETDATE(),126)

2 years ago

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))

2 years ago

从SQL Server 2008,您可以执行此操作: CONVERT(date,getdate())

2 years ago

你也可以使用 . 这是通过使用新的数据类型 DATE . 可能无法在以前的所有版本中使用,但在以后的版本中可以大大简化 .

SELECT CAST(getdate() AS DATE)
SELECT LEFT(CAST(getdate() AS DATE), 7)

2 years ago

对每个转换/强制转换函数使用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 .

2 years ago

这个解决方案对我有用,简单有效(也有126个)

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

2 years ago

如果您的源日期格式全部搞砸了,请尝试以下方面的内容:

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

2 years ago

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;