[英]To Create a Function to split dates into Year, Month, Date into a separate column in SQL
試圖創建一個將日期格式“ 2018-05-21”拆分為2018的函數| 05 | 21 | 作為三個獨立的列。 嘗試按以下方式創建函數,但在“月”,“日”上出現錯誤。 錯誤顯示“'month'附近的語法不正確。期望為'('或Select。”
CREATE FUNCTION [dbo].[functionname]
(
-- Add the parameters for the function here
@DateFormat AS DATETIME
)
RETURNS VARCHAR (MAX)
AS
BEGIN
RETURN DATEPART(YEAR,@DateFormat),
DATEPART(Month,@DateFormat),
DATEPART(Day,@DateFormat)
END
GO
當前SQL的問題是標量僅返回單個值。 您需要使用表值函數來獲取多個列。
這是TVF版本,將提供三列
CREATE FUNCTION [dbo].[FunctionName]
(
@DateFormat AS DATETIME
)
RETURNS TABLE AS RETURN
(
SELECT DATEPART(YEAR,@DateFormat) AS [Year],
DATEPART(Month,@DateFormat) AS [Month],
DATEPART(Day,@DateFormat) AS [Day]
)
用法示例:
DECLARE @dates TABLE (SomeDate DATE)
INSERT INTO @dates SELECT '01/25/2018'
INSERT INTO @dates SELECT '10/01/2008'
SELECT d.*,fn.* FROM @dates d
CROSS APPLY [dbo].[FunctionName](d.SomeDate) fn
還有一些文檔 。
也就是說,我個人不喜歡這種實現。 我只是希望在SQL的SELECT部分使用DATEPART語句。 我認為TVF使其變得更加復雜,並且沒有提供任何明顯的好處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.