Web design and hosting, database, cloud and social media solutions that deliver business results
  • рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рди
    • рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░
    • рд░реЛрдмреЛрдЯрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рди
    • рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░рд╛рдорд░реНрд╢ рд╕реЗрд╡рд╛рдПрдВ
      • рдбреЗрдЯрд╛ рдПрдХреАрдХрд░рдг
      • рдбрд╛рдЯрд╛рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рд╕реЗрд╡рд╛рдПрдВ
      • рдкрд╛рд╡рд░ рдмреАрдЖрдИ
      • рд╕рд░реНрд╡рд░ рдЕрдкрдЧреНрд░реЗрдб рдФрд░ рдбреАрдмреАрдП рд╕реЗрд╡рд╛рдПрдВ
    • рд╡реЗрдм рд╕рд╛рдЗрдЯ рдбрд┐рдЬрд╛рдЗрди
      • рднреБрдЧрддрд╛рди рджреНрд╡рд╛рд░
      • рд▓реЛрдЧреЛ рдбрд┐рдЬрд╛рдЗрди
      • рд╡реЗрдм рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдФрд░ рдЕрдиреБрд╡рд╛рдж
      • рд╡реЗрдм рд╕рд╛рдЗрдЯ рдЕрдиреБрдХреВрд▓рди
      • рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реБрд░рдХреНрд╖рд╛
      • рддрдХрдиреАрдХреА рдЙрдкрдХрд░рдг
    • рдХреНрд▓рд╛рдЙрдб рд╕рдорд╛рдзрд╛рди
      • рдЕрдореЗрдЬрд╝рди рд╡реЗрдм рд╕реЗрд╡рд╛рдПрдБ
      • Google рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛рдПрдВ
      • рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдРрдЬрд╝реБрд░
    • рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдСрдлрд┐рд╕
    • рд╕рд╛рдорд╛рдЬрд┐рдХ рдореАрдбрд┐рдпрд╛
  • рдЕрдХрд╛рджрдореА
    • рд╣рдорд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг
    • рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╛рдЗрди рд╕реАрдЦрдирд╛
      • рдореВрд▓ рдмрд╛рддреЗрдВ
      • SQL рд╕рд░реНрд╡рд░ Pivot-Unpivot рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
      • SQL рд╕рд░реНрд╡рд░ рдбреЗрдЯрд╛
      • SQL рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
      • рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░ 2008 рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЬрдирд╛рдПрдБ
      • рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░ рддрд┐рдерд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
      • рдУрдкрди рдХреНрд╡реЗрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
    • рд╡реЗрдмрд╕рд╛рдЗрдЯ рдбрд┐рдЬрд╛рдЗрди рд╕реАрдЦрдирд╛
      • Ousia рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг
      • ASP-NET
      • CSS
      • рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
    • рдХреНрд▓рд╛рдЙрдб рдФрд░ рдЖрдИрдЯреА рд╕реЗрд╡рд╛рдПрдВ рд╕реАрдЦрдирд╛
      • рдЯрд╛рд╕реНрдХ рд╢реЗрдбреНрдпреВрд▓рд░ рддреНрд░реБрдЯрд┐ 2147943645
      • рдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдФрд░ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рд╕рд░рд▓ рдЪрд░рдгреЛрдВ рдореЗрдВ рдкреАрдПрдлрдПрдХреНрд╕ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛
    • рд╕рд╛рдорд╛рдЬрд┐рдХ рдореАрдбрд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ
      • Google рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдирд╛
      • рдлреЗрд╕рдмреБрдХ рдЕрдХрд╛рдЙрдВрдЯ рдХреЛ рдкрд░реНрд╕рдирд▓ рд╕реЗ рдмрд┐рдЬрдиреЗрд╕ рдореЗрдВ рдмрджрд▓рдирд╛
      • рд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛ рдЫрд╡рд┐ рдЖрдХрд╛рд░
      • рд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛ рдЫрд╡рд┐рдпрд╛рдБ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдЯрд╛ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
      • рд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛ рдкреНрд░рдпрд╛рд╕реЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕реНрдерд╛рди рдЪреБрдирдирд╛
  • рд╣рдорд╛рд░реЗ рдмрд╛рд░реЗ рдореЗрдВ
    • рдмреНрд▓реЙрдЧ
      • Google рдХреЛрд░ рдЕрдкрдбреЗрдЯ рдЬрдирд╡рд░реА 2020
      • рдЕрдкрдиреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЪреБрдирд╛рд╡ рдХреИрд╕реЗ рдХрд░реЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдкрддреНрд░рдХ
      • рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдХрд╖реНрдЯрдкреНрд░рдж рдмрд╛рддреЗрдВ
      • рдПрдХ рдкреНрд░рд╡реЗрд╢ рд╕реНрддрд░ рдХреА рдЧреЗрдорд┐рдВрдЧ рдорд╢реАрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг
      • рдСрдирд▓рд╛рдЗрди рдШреЛрдЯрд╛рд▓реЗ рдХреЛ рд░реЛрдХрдирд╛
      • рдЧрд┐рдЧ рдЗрдХреЙрдирдореА рдХреЗ рд╕реНрдХрд┐рдорд░реНрд╕
      • рдореБрдлреНрдд рд╡реЗрдХреНрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖ 5 рд╡реЗрдмрд╕рд╛рдЗрдЯреЗрдВ
      • рдЧрд░реНрдо рдорд┐рд░реНрдЪ рдЗрдВрдЯрд░рдиреЗрдЯ рдмрдВрдж
    • рдХрд░рд┐рдпрд░
      • рдЕрдиреБрд╡рд╛рджрдХ рдЕрдВрдЧреНрд░реЗрдЬрд╝реА-рдЬрд╛рдкрд╛рдиреА
      • рдЕрдиреБрд╡рд╛рджрдХ рдЕрдВрдЧреНрд░реЗрдЬрд╝реА-рддреБрд░реНрдХреА
      • рдЕрдиреБрд╡рд╛рджрдХ рдЕрдВрдЧреНрд░реЗрдЬрд╝реА-рдкреБрд░реНрддрдЧрд╛рд▓реА
      • рдЕрдиреБрд╡рд╛рджрдХ рдЕрдВрдЧреНрд░реЗрдЬрд╝реА-рд╕реНрдкреЗрдирд┐рд╢
    • рдЯреАрдо
      • рдЕрд▓реА рдЕрд▓ рдЕрдореАрди
      • рдРрд╕реЗ рд╣реБрд░реЛ
      • рдПрдбреНрд░рд┐рдпрди рдЖрдирдВрджрди
      • рдЧреЗрд╡рд┐рди рдХреНрд▓реЗрдЯрди
      • рдЪреЗрд╕реНрдЯрд░ рдХреЙрдкрд░рдкреЙрдЯ
      • рд╕реБрдиреАрд▓ рдХреБрдорд╛рд░
      • рд╕реВрд░реНрдп рдореБрдХреНрдХрдорд▓
      • рд╕рд╛рдИ рдЧрдВрдЧреВ
    • рдирд┐рдпрд╛рдордХ
    • рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ
Deutsch (DE)English (EN-US)English (EN-GB)рд╣рд┐рдВрджреА (HI)italiano (IT)цЧецЬмшкЮ (JA)

рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛

рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЪрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП SQL рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЗрд╕реЗ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдмрд╛рдВрдзреЗрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

Context

In the process of building an automated export process for one of our clients we came across the need to generate file names on the fly. To do this we knew that it would need to be a hard coded function as you can't use variables within DATEPART, but it was still something that we wanted to make as easy as possible to use. Allowing the client to put variables in the files names would be the way forward.

To start with, add the following two functions. We've popped some links in to give you more information on how they work.

Pre-Requisites

ALTER FUNCTION [dbo].[TextPad](@PadChar CHAR(1),@PadValue NVARCHAR(100),@PadLen INT) RETURNS NVARCHAR(100) WITH SCHEMABINDING AS BEGINRETURN ISNULL(REPLICATE(@PadChar,@PadLen-LEN(@PadValue))+@PadValue,LEFT(@PadValue,@PadLen))ENDGOALTER FUNCTION [App].[TextToRows](@Delim NVARCHAR(10),@Value NVARCHAR(MAX))--Delimeter and Search StringRETURNS @Table TABLE(WordInt BIGINT IDENTITY(1,1) PRIMARY KEY,WordStr NVARCHAR(MAX)) WITH SCHEMABINDING --Return TableAS BEGIN--IF @Trim=1 SET @Value=LTRIM(RTRIM(@Value))DECLARE @CurPos BIGINT=0DECLARE @NextPos BIGINT=CHARINDEX(@Delim,@Value,@CurPos+1+LEN(@Delim))WHILE @NextPos>0 BEGININSERT INTO @Table(WordStr) SELECT SUBSTRING(@Value,@CurPos+1,(@NextPos-@CurPos)-1)SET @CurPos=@NextPosSET @NextPos=CHARINDEX(@Delim,@Value,@CurPos+1+LEN(@Delim))ENDINSERT INTO @Table(WordStr) SELECT RIGHT(@Value,LEN(@Value)-@CurPos)RETURNENDGO

Text to Rows Function

рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░ рдореЗрдВ рдбреЗрдЯрд╛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдФрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реНрдкреНрд▓рд┐рдЯрд┐рдВрдЧ рдЯреЗрдХреНрд╕реНрдЯ рдпрд╛ рдмреНрд▓рдмреНрд╕

Text Padding Function

SQL рдлрдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЯреЗрдХреНрд╕реНрдЯ рдкреИрдбрд┐рдВрдЧ рдЬреЛрдбрд╝рдирд╛

Dynamic File Name Function

Now that we have the basics in, we can move to the next stage. Those of you who are eagle eyed may have noticed the SCHEMABINDING part in the statement. As the eventual aim is to have this set as a column, every child function will need schema binding turned on.

It's a fairly simple function that uses a set of replaces, but in an order from longest to shortest. Text replacement candidates are worked out by two text two rows functions that split the text up into new rows.

Where we have put the date in hardcoded for testing, you can use GETDATE() for the machine date, or GETUTCDATE() for Universal Date

SQL

ALTER FUNCTION UpdFileName(@N NVARCHAR(MAX)) RETURNS NVARCHAR(MAX) WITH SCHEMABINDING AS BEGINDECLARE @D DATETIME='2021-06-19 15:00:00',@R NVARCHAR(MAX)=''(SELECT @R=@R+(CASE WHEN y.WordInt=1 AND x.WordInt>1 THEN  REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( y.WordStr, 'yyyy',[dbo].[TextPad]('0',DATEPART(YEAR,@D),4) COLLATE latin1_general_cs_as), 'dd',[dbo].[TextPad]('0',DATEPART(DAY,@D),2) COLLATE latin1_general_cs_as), 'MM',[dbo].[TextPad]('0',DATEPART(MONTH,@D),2) COLLATE latin1_general_cs_as), 'mm',[dbo].[TextPad]('0',DATEPART(MINUTE,@D),2) COLLATE latin1_general_cs_as), 'hh',[dbo].[TextPad]('0',(CASE WHEN DATEPART(HOUR,@D)>12 THEN DATEPART(HOUR,@D)-12 ELSE DATEPART(HOUR,@D) END),2) COLLATE latin1_general_cs_as), 'HH',[dbo].[TextPad]('0',DATEPART(HOUR,@D),2) COLLATE latin1_general_cs_as), 'ss',[dbo].[TextPad]('0',DATEPART(SECOND,@D),2) COLLATE latin1_general_cs_as), 'qq',[dbo].[TextPad]('0',DATEPART(QUARTER,@D),2) COLLATE latin1_general_cs_as), 'wk',[dbo].[TextPad]('0',DATEPART(WEEK,@D),2) COLLATE latin1_general_cs_as), 'yy',RIGHT(CONVERT(NVARCHAR(10),DATEPART(YEAR,@D)),2) COLLATE latin1_general_cs_as), 'ms',CONVERT(NVARCHAR(10),DATEPART(MILLISECOND,@D)) COLLATE latin1_general_cs_as), 'dy',CONVERT(NVARCHAR(10),DATEPART(DAYOFYEAR,@D)) COLLATE latin1_general_cs_as), 'dw',CONVERT(NVARCHAR(10),DATEPART(WEEKDAY,@D)) COLLATE latin1_general_cs_as), 's',CONVERT(NVARCHAR(10),DATEPART(SECOND,@D)) COLLATE latin1_general_cs_as), 'h',CONVERT(NVARCHAR(10),(CASE WHEN DATEPART(HOUR,@D)>12 THEN DATEPART(HOUR,@D)-12 ELSE DATEPART(HOUR,@D) END)) COLLATE latin1_general_cs_as), 'H',CONVERT(NVARCHAR(10),DATEPART(HOUR,@D)) COLLATE latin1_general_cs_as), 'M',CONVERT(NVARCHAR(10),DATEPART(MONTH,@D)) COLLATE latin1_general_cs_as), 'm',CONVERT(NVARCHAR(10),DATEPART(MONTH,@D)) COLLATE latin1_general_cs_as), 'w',CONVERT(NVARCHAR(10),DATEPART(WEEKDAY,@D)) COLLATE latin1_general_cs_as), 'd',CONVERT(NVARCHAR(10),DATEPART(DAY,@D),2) COLLATE latin1_general_cs_as), 'n',CONVERT(NVARCHAR(10),DATEPART(MINUTE,@D),2) COLLATE latin1_general_cs_as), 'y',CONVERT(NVARCHAR(10),DATEPART(DAYOFYEAR,@D)) COLLATE latin1_general_cs_as) ELSE y.WordStr END) FROM App.TextToRows('{',@N) xOUTER APPLY App.TextToRows('}',WordStr) y)RETURN @RENDGO

Bind to a table

The final stage is binding it to a table. To do that simply declare the column name and then use an AS statement and the function name with any variables required. We've popped some demo output below too.

SQL

FilePath.png
CREATE TABLE FN(FN NVARCHAR(MAX),FP AS dbo.UpdFileName(FN))GOINSERT INTO FN SELECT 'TestFile{dd_MM_yyyy_hh_mm_ss}.csv'INSERT INTO FN SELECT 'TestFile{dd_MM_yyyy_HH_mm_ss}.csv'INSERT INTO FN SELECT 'TestFile_{qq dMyy h}.txt'INSERT INTO FN SELECT 'TestFile_{qq dMyy H}.txt'SELECT * FROM FN

Author

Copyright Claytabase Ltd 2020

Registered in England and Wales 08985867

RSSLoginLink рдХреВрдХреА рдиреАрддрд┐рд╕рд╛рдЗрдЯрдореИрдк

Social Media

facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd

Get in Touch

+442392064871info@claytabase.comClaytabase Ltd, Unit 3d, Rink Road Industrial Estate, PO33 2LT, United Kingdom
рдЗрд╕ рд╕рд╛рдЗрдЯ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рднреА рдХреБрдХреАрдЬрд╝ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рд╣реИрдВ рдЗрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реА рдХреБрдХреА рдиреАрддрд┐ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧ рдкреГрд╖реНрда рдкрд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрдк рдХреБрдХреАрдЬрд╝ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВред
Ousia Logo
Logout
Ousia CMS Loader