SQL рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рдкрд░рд┐рдЪрдп, рдЙрдирдХреЗ рд▓рд╛рдн рдФрд░ рдХрдорд┐рдпрд╛рдВ
SQL рдлрд╝рдВрдХреНрд╢рди рдХреНрдпрд╛ рд╣реИ?
SQL рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХрд▓ (рд╕реНрдХреЗрд▓рд░) рдорд╛рди, рдпрд╛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, T-SQL рдпрд╛ CLR (рд╕рд╛рдорд╛рдиреНрдп рднрд╛рд╖рд╛ рд░рди-рдЯрд╛рдЗрдо) рд░реВрдЯреАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдЕрдХреНрд╕рд░ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдореЗрдВ рдЖрдк рдЬрд┐рддрдирд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред
рдЗрдирд▓рд╛рдЗрди рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдм рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ?
рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ
рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд▓реМрдЯрд╛рдПрдВ), рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдкрд░рд┐рдХрд▓рд┐рдд рдХреЙрд▓рдо рдХреЗ рд░реВрдк рдореЗрдВ, рд▓рдЧрд╛рддрд╛рд░ рд▓реБрдХрдЕрдк рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░реЗрдВ рдпрд╛ рдмрд╕ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЦрд░рд╛рдм рдЙрдкрдпреЛрдЧ
рд╣рдо рдЗрд╕реЗ рд╣рд░ рд╕рдордп рджреЗрдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд▓реБрдХрдЕрдк рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧреА, рднрд▓реЗ рд╣реА рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд╕ рдорд╛рди рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рдЪреБрдХреА рд╣реЛред рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рдЬреЙрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╕реНрдХреЗрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдЙрджрд╛рд╣рд░рдг
рд╕реНрдХреЗрд▓рд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрдВрдХреНрддрд┐ рдЖрдзрд╛рд░рд┐рдд рдкреБрди: рд╕реНрд╡рд░реВрдкрдг рдпрд╛ рдЧрдгрдирд╛ рдЬреИрд╕реЗ рддрд░реНрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреА рдкреНрд░рдХреГрддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рдПрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдирд┐рдореНрди рд▓рд┐рдВрдХ рдкрд░ рдЕрдкрдиреЗ рдЧреЗрдЯ рдПрдЬ рдлрдВрдХреНрд╢рди рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдлреЙрд░реНрдо рднрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рдХреА рдЙрдореНрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдбреЗрдЯрд╛ рдмрд╛рдж рдореЗрдВ рдкреВрдЫрддрд╛рдЫ рдХреА рдЬрд╛рдПрдЧреА рддреЛ рдпрд╣ рдкреБрд░рд╛рдирд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЬрдиреНрдорддрд┐рдерд┐ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдВ рдФрд░ рддреБрд░рдВрдд рдЙрд╕рдХреА рдЧрдгрдирд╛ рдХрд░ рд▓реЗрдВред рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣рдордиреЗ рддрдм рддрдХ рдПрдХ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдЧрдгрдирд╛ рдХреЛ рдмреИрдХрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдЙрджрд╛рд╕ рд░реВрдк рд╕реЗ, рдореГрддреНрдпреБ рдХреЗ рд╕рдордп рдХреА рдЖрдпреБ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ (рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдирдПрдЪрдПрд╕ рдЕрдиреБрдмрдВрдз рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛)ред
Example
CREATE FUNCTION [Dates].[GetAge](@Date DATETIME2,@Until DATETIME2) RETURNS INT AS BEGINIF @Until IS NULL SET @Until=CONVERT(DATE,GETDATE())DECLARE @Age INT=DATEDIFF(YEAR,@Date,@Until)+(CASE WHEN DATEPART(DAYOFYEAR,@Date)>(DATEPART(DAYOFYEAR,@Until)+(CASE WHEN dbo.GetLeapYear(@Date)=1 AND DATEPART(DAYOFYEAR,@Date)>59 THEN 1 ELSE 0 END))THEN -1 ELSE 0 END)RETURN @AgeEND
рд╕реНрдХреЗрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдЙрджрд╛рд╣рд░рдг
рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдмрд╕ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдпрд╛ рддреЛ рд╡рд░реНрддрдорд╛рди рдЖрдпреБ рдпрд╛ рдореГрддреНрдпреБ рдХреА рдЖрдпреБ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред
Use in a select statement
SELECT [PersonID],[DateOfBirth],[dbo].[GetAge]([DateOfBirth],[DeceasedDate]) AgeAsFunction,--Simpler code to understand!DATEDIFF(YEAR,[DateOfBirth],[DeceasedDate])+(CASE WHEN DATEPART(DAYOFYEAR,[DateOfBirth])>(DATEPART(DAYOFYEAR,[DeceasedDate])+(CASE WHEN dbo.GetLeapYear([DateOfBirth])=1 AND DATEPART(DAYOFYEAR,[DateOfBirth])>59 THEN 1 ELSE 0 END))THEN -1 ELSE 0 END) AgeAsScript,[DeceasedDate]FROM [Person]
рд╕реНрдХреЗрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдЙрджрд╛рд╣рд░рдг
рд▓рд╛рдн : рд▓рдЧрд╛рддрд╛рд░, рдореЙрдбреНрдпреВрд▓рд░, рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ
рдиреБрдХрд╕рд╛рди : рдХреЛрдб рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛
рдЖрдо рддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдмреЗрд╣рдж рд╕рдЯреАрдХ рднреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд▓реАрдк рд╡рд░реНрд╖ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реНрд╡рднрд╛рд╡ рд╕реЗ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХрднреА рднреА рд╕реНрдерд╛рдпреА рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЯреЗрдмрд▓ рдХреЙрд▓рдо рдЙрджрд╛рд╣рд░рдг
рдкрд░рд┐рдХрд▓рд┐рдд рд╕реНрддрдВрднреЛрдВ рдХреЛ рдпрд╛ рддреЛ рд╕реНрдерд╛рдпреА (рдбреЗрдЯрд╛ рд╣реЛрдиреЗ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди) рдпрд╛ рдЧреИрд░-рдирд┐рд░рдВрддрд░ (рдкрдВрдХреНрддрд┐ рдХреЗ рдЪрдпрдирд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╣рд░ рдмрд╛рд░ рдкрд░рд┐рдХрд▓рд┐рдд) рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЙрди рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдордиреЗ рдпрд╣рд╛рдВ рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИред
рдиреЛрдЯ : рд╕реНрдерд╛рдпреА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзрд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
рдЧреИрд░-рдирд┐рд░рдВрддрд░: рдЖрдпреБ
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЖрдпреБ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЗрд╕реЗ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рдХреЙрд▓рдо рд╕реЗ рдорд╛рдиреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХреЙрд▓рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирддреЗ рд╣реИрдВред
Add to a table
CREATE TABLE [Person]([PersonID] [int] IDENTITY(1,1) NOT NULL,[DateOfBirth] [datetime] NULL,[Age] AS ([dbo].[GetAge]([DateOfBirth],[DeceasedDate])),[DeceasedDate] [datetime] NULL)
Select Statement
SELECT [PersonID],[DateOfBirth],[Age] AgeAsColumn,--Even simpler code to understand!DATEDIFF(YEAR,[DateOfBirth],[DeceasedDate])+(CASE WHEN DATEPART(DAYOFYEAR,[DateOfBirth])>(DATEPART(DAYOFYEAR,[DeceasedDate])+(CASE WHEN dbo.GetLeapYear([DateOfBirth])=1 AND DATEPART(DAYOFYEAR,[DateOfBirth])>59 THEN 1 ELSE 0 END))THEN -1 ELSE 0 END) AgeAsScript,[DeceasedDate]FROM [Person]
рдЧреИрд░-рдирд┐рд░рдВрддрд░: рдЖрдпреБ
рд▓рд╛рдн : рд▓рдЧрд╛рддрд╛рд░, рдореЙрдбреНрдпреВрд▓рд░
рдиреБрдХрд╕рд╛рди : рдЬрд░реВрд░рдд рди рд╣реЛрдиреЗ рдкрд░ рдХреНрд╡реЗрд░реА рдХреА рдЧрддрд┐ рдзреАрдореА рдХрд░ рджреЗрддрд╛ рд╣реИред
рдХрд╛рдпрдо: рдЫреЛрдЯрд╛ рд╕реАрдПрд╕рдПрд╕
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ CSS рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд╛рди рдХреЛ 30% рддрдХ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЪреБрдирд┐рдВрджрд╛ рдЧрддрд┐ рдзреАрдореА рд╣реЛ рдЬрд╛рдПрдЧреА, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕рдореНрдорд┐рд▓рд┐рдд/рдЕрджреНрдпрддрди рд╕рдордп рдкрд░ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдХреЙрд▓рдо рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдХрд░, рд╣рдореЗрдВ рдЗрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
Add to a Table
CREATE TABLE CSS(CSSID INT IDENTITY(1,1) NOT NULL,CSSText NVARCHAR(MAX),CSSMin AS (ous.CSSProcessor([CSSText])) PERSISTED)
рдХрд╛рдпрдо: рдЫреЛрдЯрд╛ рд╕реАрдПрд╕рдПрд╕
рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХреЙрд▓рдо рдХреА рддрд░рд╣ рд╣реА рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдмреНрд▓реЛрдЯрд┐рдВрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрдерди рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рднреА рдмрдЪрд╛рддрд╛ рд╣реИред
рд▓рд╛рдн : рд▓рдЧрд╛рддрд╛рд░, рдореЙрдбреНрдпреВрд▓рд░, рддреЗрдЬ рдЪрдпрди рдЧрддрд┐, рдЯреНрд░рд┐рдЧрд░ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ!
рдиреБрдХрд╕рд╛рди : рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд╛рди рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдбрд╛рд▓рдиреЗ рдХреА рдЧрддрд┐ рдХреЛ рдзреАрдорд╛ рдХрд░рддрд╛ рд╣реИ
рдПрдХ рджреГрд╢реНрдп рдХреЛ рдмрджрд▓рдирд╛
рд╣рдо рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬрдм рд╣рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдЬреЙрдЗрди рдХреЛ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВред
рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рднреА, рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдкрд░ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рджреЛ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ рджреВрд╕рд░рд╛ рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
Create a function
CREATE FUNCTION Dates.GetCalender(@DateFrom DATETIME2,@DateTo DATETIME2,@Function INT) RETURNS @D TABLE (CalenderDate DATETIME2(7) NOT NULL PRIMARY KEY,CalenderCA INT NULL,CalenderCD INT NULL,WeekDayID INT NULL,WeekDayName VARCHAR(9) NULL,HolidayType NVARCHAR(100)) AS BEGININSERT INTO @DSELECT c.*,HolidayTypeFROM [Utilities].[Dates].[Calender] cLEFT JOIN Utilities.Dates.CalenderHolidays h ON h.CalenderDate=c.CalenderDate AND CalenderFunction=@FunctionWHERE c.CalenderDate BETWEEN @DateFrom AND @DateTo RETURNENDGO
Create a view
CREATE VIEW Dates.GetCalenderView ASSELECT c.CalenderDate, CalenderCA, CalenderCD, WeekDayID, WeekDayName,h.HolidayType,c.CalenderFunctionFROM (SELECT CalenderDate, CalenderCA, CalenderCD, WeekDayID, WeekDayName, CalenderFunction FROM [Utilities].[Dates].[Calender],(SELECT DISTINCT CalenderFunction FROM Dates.CalenderHolidays) x) cLEFT JOIN Utilities.Dates.CalenderHolidays h ON h.CalenderDate=c.CalenderDate AND h.CalenderFunction=c.CalenderFunction
Usage
SELECT * FROM Dates.GetCalender('2018-01-01','2018-12-31',0) --England & WalesSELECT * FROM Dates.GetCalender('2018-01-01','2018-12-31',1) --Scotland----OR----SELECT * FROM Dates.GetCalenderView WHERE CalenderDate BETWEEN '2018-01-01' AND '2018-12-31' AND CalenderFunction=0
рдПрдХ рджреГрд╢реНрдп рдХреЛ рдмрджрд▓рдирд╛
рд▓рд╛рдн : рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдореНрдкреИрдХреНрдЯ, рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА (рдЖрдЧреЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА) рдХреЗ рд╕рд╛рде рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛, рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╣рд▓реЗ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рдереЗред
рдиреБрдХрд╕рд╛рди : рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреЛрдб, рдХрдо рд▓рдЪреАрд▓рд╛
рдЕрдкреНрд▓рд╛рдИ рдЬреЙрдЗрди рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ
рдЯреЗрдмрд▓ рдлрдВрдХреНрд╢рдиреНрд╕ рдЕрдкреНрд▓рд╛рдИ рдЬреЙрдЗрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдкрдВрдХреНрддрд┐-рджрд░-рдкрдВрдХреНрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред SQL рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ TextToRows рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реАрдорд╛рдВрдХрдХреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЛ рджреЛ рдмрд╛рд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрдмрд▓ рдЕрдкреНрд▓рд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
SQL Code
DECLARE @TestText TABLE(TextToSplit NVARCHAR(100))INSERT INTO @TestText SELECT 'Text,To,Tows:Split,One'INSERT INTO @TestText SELECT 'Text,To,Tows:Split,Two'SELECT t.TextToSplit,s1.WordInt,s1.WordStr,s2.WordInt,s2.WordStrFROM @TestText tOUTER APPLY dbo.TextToRows(':',TextToSplit) s1OUTER APPLY dbo.TextToRows(',',WordStr) s2
рдЖрдЧреЗ рдХрд╛ рд╡рд┐рд╡рд░рдг
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдиреАрдЪреЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред