SQL日期格式

时间:2015-08-18 07:42:18

标签: sql sql-server sql-server-2008 datetime formats

如何在SQL Server 2008中将此201402110544转换为date(2014-02-11)?

3 个答案:

答案 0 :(得分:1)

您可以转换为DATE数据类型(https://msdn.microsoft.com/en-us/library/bb630352(v=sql.100).aspx

SELECT CAST(datetime_value AS DATE)

SELECT CAST(GETDATE() AS DATE) --> 2015-08-18

如果您要将字符串转换为DATE,则可以使用:

SELECT CAST(LEFT('201402110544', 8) AS DATE)

通过获取前8个字符(YYYYMMDD)来缩小时间部分,并将生成一个有效的字符串以转换为DATE

答案 1 :(得分:0)

字符串到日期转换肯定是SQL Server的弱点。 CONVERT可以做到这一点,但只能处理许多给定的格式。因此,您必须先将字符串转换为这种格式,然后再将其转换为日期。

一种这样的格式是120 ='yyyy-mm-dd hh:mi:ss',我认为它最接近你的。另一个102 ='yyyy.mm.dd'足以得到日期。

convert(
  date, 
  concat(substring(datestring, 1,4), '.', 
         substring(datestring, 5,2), '.', 
         substring(datestring, 7,2)), 
  102)
from data;

SQL小提琴:http://www.sqlfiddle.com/#!3/9eecb7/3689

编辑:我有所纠正。 Horia是对的; CAST支持'yyyymmdd',因此您只需剪切字符串的时间部分即可直接使用它。这比我上面的建议更具可读性,这使得CAST成为您案例中更好的选择。

答案 2 :(得分:0)

如果此格式始终相同,则可以执行此操作

DECLARE @d VARCHAR(20)='201402110544'
SELECT CAST(SUBSTRING(@d,0,9) as DATETIME)

另请查看The ultimate guide to the datetime datatypes,其中详细说明了处理日期时间