如何从 SQL Server 中带有时间戳列的日期中获取日期部分?

T.H*_*.H. 2 sql-server-2008 sql-server

我想DDMMYYY从以格式存储日期的字段中获取格式的日期YYYY-MM-DD Timestamp。(例如,“2018-11-09”应显示“09Nov2018”)。

我知道一种方法是使用可以提取的datepart函数(https://docs.microsoft.com/en-us/sql/t-sql/functions/datepart-transact-sql?view=sql-server-2017)单独的年、月和日,然后我可以连接它们。

编辑:我不想使用getdate(). 有一列具有YYYY-MM-DD Timestamp格式,我正在从该列中提取'DDMM2018'. 我在用:

concat
(
  CONVERT(varchar, DATEPART(dd,columndate)), 
  CONVERT(varchar, LEFT(DATENAME(month, DATEPART(month,columndate)),3)) , 
  CONVERT(varchar, DATEPART(year, columndate))
) AS trial
Run Code Online (Sandbox Code Playgroud)

这给了我'9Nov2018'而不是'09Nov2018'。我打算再次将其转换回`datetype',因为这就是我想要的结果。

有没有其他方法可以实现这一目标?

任何想法/建议非常感谢。

Aar*_*and 5

这是一个使用示例GETDATE()

SELECT REPLACE(CONVERT(char(11), GETDATE(), 13),' ','');
Run Code Online (Sandbox Code Playgroud)

产量12Nov2018。三天前,它会屈服09Nov2018

要对您的表运行此命令:

SELECT Trial = REPLACE(CONVERT(char(11), YOUR_COLUMN_NAME_HERE, 13),' ','')
  FROM dbo.YOUR_TABLE_NAME_HERE;
Run Code Online (Sandbox Code Playgroud)

在 SQL Server 2012 及更高版本中,您可以使用,FORMAT()但是,就像 Tibor 建议的那样,这会使用更多的 CPU(在我的测试中大约是运行时间的两倍)。

SELECT FORMAT(GETDATE(), 'ddMMMyyyy');
Run Code Online (Sandbox Code Playgroud)