是否有更好的连接日期类型的方法

时间:2018-04-16 14:08:20

标签: sql-server tsql date datetime

我有Date Type colum,数据如下所示:

2011-07-01 00:00:00.000

我希望从像

这样的东西中汲取灵感
2011-7-1

有我的方式,但可能会做得更好

SELECT CAST(YEAR(ModifiedDate) AS varchar(15)) + '-' + CAST(MONTH(ModifiedDate) AS varchar(15)) + '-' + CAST(DAY(ModifiedDate) AS varchar(15))
FROM Sales.SalesOrderDetail

3 个答案:

答案 0 :(得分:1)

每条评论反馈和参考:https://sqlperformance.com/2015/06/t-sql-queries/format-is-nice-and-all-but

此CAST是ANSI标准与CONVERT

SELECT CAST(GetDate() as DATE)

为什么不使用FORMAT,一般应留给UI进行

为什么不使用CONVERT(VARCHAR(10),@变量,101)

enter image description here

答案 1 :(得分:-1)

您可以使用FORMATCASTCONVERT

这将返回为不同文化格式化的日期部分:

DECLARE @ft DATETIME = '2011-07-01 00:00:00.000'
SELECT FORMAT(@FT, 'd', 'en-us')

结果:7/11/2011

DECLARE @ft DATETIME = '2011-07-01 00:00:00.000'
SELECT FORMAT(@ft, 'yyyy-M-d')

结果:2011-7-11

有关格式的更多信息:https://docs.microsoft.com/en-us/sql/t-sql/functions/format-transact-sql?view=sql-server-2017

这将返回datepart:

DECLARE @ft DATETIME = '2011-07-01 00:00:00.000'
SELECT CAST(@FT as date)

结果:2011-07-11

这为您提供了更多不同格式的选项:

DECLARE @ft DATETIME = '2011-07-01 00:00:00.000'
SELECT CONVERT(VARCHAR(10), @ft, 101)

结果:2011-07-01

您也可以使用文本代替变量:

SELECT CONVERT(VARCHAR(10), '2011-07-01 00:00:00.000', 101)

结果:2011-07-01

有关CAST和CONVERT的更多信息:https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017

答案 2 :(得分:-1)

您可以使用FORMAT执行此操作。

DECLARE @DATE DATETIME
SET @DATE = '2011-07-01 00:00:00.000'
SELECT FORMAT(@DATE, 'yyyy-M-d')
Result: 2011-7-1