簡體   English   中英

創建函數以將日期拆分為年,月,日,將其拆分為SQL中的單獨列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM