Sql server 从存储过程中的不同年、月查询返回(Cast?Convert?)值作为日期时间
我有一个数据库,其中有一个Publications表,可以通过一个子Publications表连接到iself 我的存储过程从指定类型的发布的ReleaseDate字段返回所有不同的年-月组合,这些发布与特定的by id发布无关,因此返回2个参数,请参见下文 问题: 该过程工作正常,但我希望返回列类型为DateTime2,伪日期为1。现在,它返回两列整数。我该怎么做 我知道我可以在我的应用程序代码中进行转换,但我更希望它作为数据库的日期时间交付 我的SQL不是很好。我甚至不知道我应该使用演员阵容还是转换 在这样的查询中,我找不到在线转换回datetime的示例。有人能帮忙吗?以下是我所写的程序:Sql server 从存储过程中的不同年、月查询返回(Cast?Convert?)值作为日期时间,sql-server,stored-procedures,Sql Server,Stored Procedures,我有一个数据库,其中有一个Publications表,可以通过一个子Publications表连接到iself 我的存储过程从指定类型的发布的ReleaseDate字段返回所有不同的年-月组合,这些发布与特定的by id发布无关,因此返回2个参数,请参见下文 问题: 该过程工作正常,但我希望返回列类型为DateTime2,伪日期为1。现在,它返回两列整数。我该怎么做 我知道我可以在我的应用程序代码中进行转换,但我更希望它作为数据库的日期时间交付 我的SQL不是很好。我甚至不知道我应该使用演员阵容
ALTER PROCEDURE sp_DistinctPubMonthYears
@PubType char(1),
@PubId int = 0
AS
BEGIN
SELECT
DISTINCT TOP (100) PERCENT
DATEPART(month, ReleaseDate) AS month,
DATEPART(year, ReleaseDate) AS year
FROM(
SELECT
Publications.ReleaseDate AS ReleaseDate,
Publications.PublicationId As PubId,
Publications.PubType AS PubType,
SubPublications.PublicationId AS ParentId
FROM
Publications LEFT JOIN SubPublications
ON
Publications.PublicationId = SubPublications.PublicationId
WHERE
Publications.PubType = @PubType AND
Publications.PublicationId <> @PubId AND
(
SubPublications.PublicationId <> @PubId OR
/*either it's parent is NOT the one we're searching on or */
SubPublications.PublicationId IS NULL
/*or it's not joined to anything at all */
)
) AS sub
ORDER BY year ASC, month ASC
END
GO
DATEADDMONTH,DATEDIFFMONTH,'1600-01-01T00:00:00',ReleaseDate,'1600-01-01T00:00:00'应为您提供yyyy-MM dd 00:00:00日期。1600-01-01T00:00:00只是一个任意的日期,最好选择在您可能存储在ReleaseDate列中的任何日期之前。您不需要TOP,也可以按表达式排序 这将为您提供本月的开始时间
SELECT DISTINCT
CAST(
DATEADD(month, DATEDIFF(month, 0, ReleaseDate), 0) AS datetime2
) AS myCol
FROM(
...
ORDER BY
DATEADD(month, DATEDIFF(month, 0, ReleaseDate), 0)
编辑:正如浮士德提到的,如果您愿意,我们可以用别名订购
...
ORDER BY
myCol
在这种情况下,结果是相同的
如果强制转换为varchar,则会得到不同的结果。这就是为什么我倾向于使用表达式而不是别名,但它非常简单。当然我会测试我的变化…,不是吗?你说的虚拟日期1是什么意思?啊,您的意思是考虑不将存储过程命名为前缀为sp_。看这个:@Tahbaza:我不知道+1.在order by子句中是否有任何理由使用显式表达式而不是mycl别名?@Faust:没有理由。只需复制/粘贴。更新答案,干杯