{"id":284,"date":"2019-02-16T18:00:11","date_gmt":"2019-02-16T18:00:11","guid":{"rendered":"https:\/\/datablog.roman-halliday.com\/?p=284"},"modified":"2019-02-02T18:58:40","modified_gmt":"2019-02-02T18:58:40","slug":"partitions-in-sql-server-function-definitions-left-vs-right","status":"publish","type":"post","link":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/16\/partitions-in-sql-server-function-definitions-left-vs-right\/","title":{"rendered":"Partitions in SQL Server: Function Definitions, LEFT vs RIGHT"},"content":{"rendered":"<p>This is article 2 in my series of articles on partitions in SQL Server. In my first article\u00a0<a href=\"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/02\/partitions-in-sql-server-creating-a-partitioned-table\/\">Partitions in SQL Server: Creating a Partitioned Table<\/a>, I briefly covered the difference between LEFT and RIGHT in partition function definitions. Here I have a comparison of the two.<\/p>\n<p>The differences between left and right partition functions are:<\/p>\n<ul>\n<li><code>LEFT<\/code>: The partition will contain data equal to or less than the value specified. I.E. We define the partition by its&#8217;\u00a0<em>highest<\/em> value.<\/li>\n<li><code>RIGHT<\/code>:\u00a0The partition will contain data equal to or greater than the value specified.\u00a0I.E. We define the partition by its&#8217;\u00a0<em>lowest<\/em> value.<\/li>\n<\/ul>\n<h1>Testing Script<\/h1>\n<p>Below I create two sets of function, scheme and table. One with the function to the right, the other to the left. The script inserts a sample value to each then views the partition information to see where the row went.<\/p>\n<p>Note that both tables have 4 partitions, and they appear to have the same lower and upper values. The only difference is how they are specified, and what happens to a value which is equal to that of the partition value.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\">--------------------------------------------------------------------------------\r\n-- Partition Function: Split by year - RIGHT\r\n--------------------------------------------------------------------------------\r\nCREATE PARTITION FUNCTION [FactTable_R_PF]\r\n      (DATE)\r\nAS\r\nRANGE\r\n  RIGHT\r\nFOR VALUES\r\n(\r\n    N'2016-01-01T00:00:00',\r\n    N'2017-01-01T00:00:00',\r\n    N'2018-01-01T00:00:00'\r\n);\r\n\r\n--------------------------------------------------------------------------------\r\n-- Partition Scheme: Split by year - RIGHT\r\n--------------------------------------------------------------------------------\r\nCREATE PARTITION SCHEME [FactTable_R_PS]\r\nAS PARTITION [FactTable_R_PF]\r\nALL TO ([primary])\r\n;\r\n\r\n--------------------------------------------------------------------------------\r\n-- Create Table using RIGHT\r\n--------------------------------------------------------------------------------\r\nCREATE TABLE [dbo].[FactTable_partitioned_R]\r\n(\r\n    [TheDate]     DATE,\r\n    [c_attribute] VARCHAR(100),\r\n    [c_metric]    BIGINT,\r\n    CONSTRAINT [PK_FactTable_partitioned_R] PRIMARY KEY ([TheDate], [c_attribute])\r\n)\r\nON [FactTable_R_PS] ([TheDate])\r\nWITH\r\n( DATA_COMPRESSION = ROW\r\n)\r\n;\r\n\r\n--------------------------------------------------------------------------------\r\n-- Partition Function: Split by year - LEFT\r\n--------------------------------------------------------------------------------\r\nCREATE PARTITION FUNCTION [FactTable_L_PF]\r\n      (DATE)\r\nAS\r\nRANGE\r\n  LEFT\r\nFOR VALUES\r\n(\r\n    N'2016-01-01T00:00:00',\r\n    N'2017-01-01T00:00:00',\r\n    N'2018-01-01T00:00:00'\r\n);\r\n\r\n--------------------------------------------------------------------------------\r\n-- Partition Scheme: Split by year - LEFT\r\n--------------------------------------------------------------------------------\r\nCREATE PARTITION SCHEME [FactTable_L_PS]\r\nAS PARTITION [FactTable_L_PF]\r\nALL TO ([primary])\r\n;\r\n\r\n--------------------------------------------------------------------------------\r\n-- Create Table using LEFT\r\n--------------------------------------------------------------------------------\r\nCREATE TABLE [dbo].[FactTable_partitioned_L]\r\n(\r\n    [TheDate]     DATE,\r\n    [c_attribute] VARCHAR(100),\r\n    [c_metric]    BIGINT,\r\n    CONSTRAINT [PK_FactTable_partitioned_L] PRIMARY KEY ([TheDate], [c_attribute])\r\n)\r\nON [FactTable_L_PS] ([TheDate])\r\nWITH\r\n( DATA_COMPRESSION = ROW\r\n)\r\n;\r\n\r\n--------------------------------------------------------------------------------\r\n-- Sample data: '01-JAN-17'\r\n--------------------------------------------------------------------------------\r\nINSERT\r\n  INTO [dbo].[FactTable_partitioned_R]\r\n      ([TheDate], [c_attribute], [c_metric])\r\nVALUES('01-JAN-17',      'Test',          1)\r\n;\r\nINSERT\r\n  INTO [dbo].[FactTable_partitioned_L]\r\n      ([TheDate], [c_attribute], [c_metric])\r\nVALUES('01-JAN-17',      'Test',          1)\r\n;\r\n\r\n--------------------------------------------------------------------------------\r\n-- Sample data: '01-JUN-17'\r\n--------------------------------------------------------------------------------\r\n\/*\r\nINSERT\r\n  INTO [dbo].[FactTable_partitioned_R]\r\n      ([TheDate], [c_attribute], [c_metric])\r\nVALUES('01-JUN-17',      'Test',          1)\r\n;\r\nINSERT\r\n  INTO [dbo].[FactTable_partitioned_L]\r\n      ([TheDate], [c_attribute], [c_metric])\r\nVALUES('01-JUN-17',      'Test',          1)\r\n;\r\n*\/\r\n\r\nGO\r\n\r\n--------------------------------------------------------------------------------\r\n-- View Usage\r\n--------------------------------------------------------------------------------\r\nSELECT OBJECT_NAME(p.[object_id]) AS [Table_Name],\r\n       p.[partition_number],\r\n       p.[rows]                   AS [Partition_rows],\r\n       i.[name]                   AS [Index_Name],\r\n       s.[name]                   AS [Scheme_Name],\r\n       f.[name]                   AS [Function_Name],\r\n       lv.[value]                 AS [Lower_Value],\r\n       rv.[value]                 AS [Upper_Value]\r\n  FROM sys.partitions p\r\n    INNER JOIN sys.objects o\r\n       ON o.[object_id] = p.[object_id]\r\n     LEFT JOIN sys.indexes i\r\n       ON i.[object_id] = p.[object_id]\r\n      AND i.[index_id]  = p.[index_id]\r\n     LEFT JOIN sys.partition_schemes s\r\n       ON s.[data_space_id] = i.[data_space_id]\r\n     LEFT JOIN sys.partition_functions f\r\n       ON f.[function_id] = s.[function_id]\r\n     LEFT JOIN sys.partition_range_values rv\r\n       ON rv.[function_id] = f.[function_id]\r\n      AND rv.[boundary_id] = p.[partition_number]\r\n     LEFT JOIN sys.partition_range_values lv\r\n       ON lv.[function_id] = f.[function_id]\r\n      AND lv.[boundary_id] = p.[partition_number] - 1\r\nWHERE 1=1\r\n   AND o.[name] LIKE 'FactTable%'\r\nORDER BY o.[name],\r\n       i.[name],\r\n       p.[partition_number]\r\n;\r\n\r\nGO\r\n\r\n--------------------------------------------------------------------------------\r\n-- Clean up\r\n--------------------------------------------------------------------------------\r\n\r\nDROP TABLE [dbo].[FactTable_partitioned_R];\r\nGO\r\nDROP TABLE [dbo].[FactTable_partitioned_L];\r\nGO\r\nDROP PARTITION SCHEME [FactTable_R_PS];\r\nGO\r\nDROP PARTITION SCHEME [FactTable_L_PS];\r\nGO\r\nDROP PARTITION FUNCTION [FactTable_R_PF];\r\nGO\r\nDROP PARTITION FUNCTION [FactTable_L_PF];\r\n<\/pre>\n<h1>Results<\/h1>\n<p>The code above includes two sets of inserts (one commented out) so that we can see which partitions contain the row inserted for each case. I&#8217;ve listed the output for the two cases below.<\/p>\n<h2>Jan 2017<\/h2>\n<p>Here we see the difference in which partition is used. For the left partitioned table partition 2 is used, for the right partition 3.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-highlight=\"4,9\">Table_Name              partition_number Partition_rows Index_Name                 Scheme_Name    Function_Name  Lower_Value             Upper_Value\r\n----------------------- ---------------- -------------- -------------------------- -------------- -------------- ----------------------- -----------------------\r\nFactTable_partitioned_L 1                0              PK_FactTable_partitioned_L FactTable_L_PS FactTable_L_PF NULL                    2016-01-01 00:00:00.000\r\nFactTable_partitioned_L 2                1              PK_FactTable_partitioned_L FactTable_L_PS FactTable_L_PF 2016-01-01 00:00:00.000 2017-01-01 00:00:00.000 &lt;--  LEFT '01-JAN-17'\r\nFactTable_partitioned_L 3                0              PK_FactTable_partitioned_L FactTable_L_PS FactTable_L_PF 2017-01-01 00:00:00.000 2018-01-01 00:00:00.000\r\nFactTable_partitioned_L 4                0              PK_FactTable_partitioned_L FactTable_L_PS FactTable_L_PF 2018-01-01 00:00:00.000 NULL\r\nFactTable_partitioned_R 1                0              PK_FactTable_partitioned_R FactTable_R_PS FactTable_R_PF NULL                    2016-01-01 00:00:00.000\r\nFactTable_partitioned_R 2                0              PK_FactTable_partitioned_R FactTable_R_PS FactTable_R_PF 2016-01-01 00:00:00.000 2017-01-01 00:00:00.000\r\nFactTable_partitioned_R 3                1              PK_FactTable_partitioned_R FactTable_R_PS FactTable_R_PF 2017-01-01 00:00:00.000 2018-01-01 00:00:00.000 &lt;-- RIGHT '01-JAN-17'\r\nFactTable_partitioned_R 4                0              PK_FactTable_partitioned_R FactTable_R_PS FactTable_R_PF 2018-01-01 00:00:00.000 NULL<\/pre>\n<h2>Jun 2017<\/h2>\n<p>In both cases, partition 3 is used. There appears to be no difference between the two definitions.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-highlight=\"5,9\">Table_Name              partition_number Partition_rows Index_Name                 Scheme_Name    Function_Name  Lower_Value             Upper_Value\r\n----------------------- ---------------- -------------- -------------------------- -------------- -------------- ----------------------- -----------------------\r\nFactTable_partitioned_L 1                0              PK_FactTable_partitioned_L FactTable_L_PS FactTable_L_PF NULL                    2016-01-01 00:00:00.000\r\nFactTable_partitioned_L 2                0              PK_FactTable_partitioned_L FactTable_L_PS FactTable_L_PF 2016-01-01 00:00:00.000 2017-01-01 00:00:00.000\r\nFactTable_partitioned_L 3                1              PK_FactTable_partitioned_L FactTable_L_PS FactTable_L_PF 2017-01-01 00:00:00.000 2018-01-01 00:00:00.000 &lt;--  LEFT '01-JUN-17'\r\nFactTable_partitioned_L 4                0              PK_FactTable_partitioned_L FactTable_L_PS FactTable_L_PF 2018-01-01 00:00:00.000 NULL\r\nFactTable_partitioned_R 1                0              PK_FactTable_partitioned_R FactTable_R_PS FactTable_R_PF NULL                    2016-01-01 00:00:00.000\r\nFactTable_partitioned_R 2                0              PK_FactTable_partitioned_R FactTable_R_PS FactTable_R_PF 2016-01-01 00:00:00.000 2017-01-01 00:00:00.000\r\nFactTable_partitioned_R 3                1              PK_FactTable_partitioned_R FactTable_R_PS FactTable_R_PF 2017-01-01 00:00:00.000 2018-01-01 00:00:00.000 &lt;-- RIGHT '01-JUN-17'\r\nFactTable_partitioned_R 4                0              PK_FactTable_partitioned_R FactTable_R_PS FactTable_R_PF 2018-01-01 00:00:00.000 NULL\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In my first article\u00a0Partitions in SQL Server: Creating a Partitioned Table, I briefly covered the difference between LEFT and RIGHT in partition function definitions. Here I have a comparison of the two.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,4],"tags":[24,7,8],"class_list":["post-284","post","type-post","status-publish","format-standard","hentry","category-databases","category-sql-server","tag-partition","tag-sql","tag-t-sql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Partitions in SQL Server: Function Definitions, LEFT vs RIGHT - Rows Across The Lake<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/16\/partitions-in-sql-server-function-definitions-left-vs-right\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Partitions in SQL Server: Function Definitions, LEFT vs RIGHT - Rows Across The Lake\" \/>\n<meta property=\"og:description\" content=\"In my first article\u00a0Partitions in SQL Server: Creating a Partitioned Table, I briefly covered the difference between LEFT and RIGHT in partition function definitions. Here I have a comparison of the two.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/16\/partitions-in-sql-server-function-definitions-left-vs-right\/\" \/>\n<meta property=\"og:site_name\" content=\"Rows Across The Lake\" \/>\n<meta property=\"article:published_time\" content=\"2019-02-16T18:00:11+00:00\" \/>\n<meta name=\"author\" content=\"david\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@d_roman_h\" \/>\n<meta name=\"twitter:site\" content=\"@d_roman_h\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"david\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/16\\\/partitions-in-sql-server-function-definitions-left-vs-right\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/16\\\/partitions-in-sql-server-function-definitions-left-vs-right\\\/\"},\"author\":{\"name\":\"david\",\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/#\\\/schema\\\/person\\\/575f96d2590c3085923ff9e1b565748b\"},\"headline\":\"Partitions in SQL Server: Function Definitions, LEFT vs RIGHT\",\"datePublished\":\"2019-02-16T18:00:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/16\\\/partitions-in-sql-server-function-definitions-left-vs-right\\\/\"},\"wordCount\":270,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/#\\\/schema\\\/person\\\/575f96d2590c3085923ff9e1b565748b\"},\"keywords\":[\"partition\",\"SQL\",\"T-SQL\"],\"articleSection\":[\"Databases\",\"SQL Server\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/16\\\/partitions-in-sql-server-function-definitions-left-vs-right\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/16\\\/partitions-in-sql-server-function-definitions-left-vs-right\\\/\",\"url\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/16\\\/partitions-in-sql-server-function-definitions-left-vs-right\\\/\",\"name\":\"Partitions in SQL Server: Function Definitions, LEFT vs RIGHT - Rows Across The Lake\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/#website\"},\"datePublished\":\"2019-02-16T18:00:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/16\\\/partitions-in-sql-server-function-definitions-left-vs-right\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/16\\\/partitions-in-sql-server-function-definitions-left-vs-right\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/index.php\\\/2019\\\/02\\\/16\\\/partitions-in-sql-server-function-definitions-left-vs-right\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Partitions in SQL Server: Function Definitions, LEFT vs RIGHT\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/#website\",\"url\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/\",\"name\":\"Rows Across The Lake\",\"description\":\"Data &amp; Databases\",\"publisher\":{\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/#\\\/schema\\\/person\\\/575f96d2590c3085923ff9e1b565748b\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/datablog.roman-halliday.com\\\/#\\\/schema\\\/person\\\/575f96d2590c3085923ff9e1b565748b\",\"name\":\"david\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g\",\"caption\":\"david\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Partitions in SQL Server: Function Definitions, LEFT vs RIGHT - Rows Across The Lake","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/16\/partitions-in-sql-server-function-definitions-left-vs-right\/","og_locale":"en_GB","og_type":"article","og_title":"Partitions in SQL Server: Function Definitions, LEFT vs RIGHT - Rows Across The Lake","og_description":"In my first article\u00a0Partitions in SQL Server: Creating a Partitioned Table, I briefly covered the difference between LEFT and RIGHT in partition function definitions. Here I have a comparison of the two.","og_url":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/16\/partitions-in-sql-server-function-definitions-left-vs-right\/","og_site_name":"Rows Across The Lake","article_published_time":"2019-02-16T18:00:11+00:00","author":"david","twitter_card":"summary_large_image","twitter_creator":"@d_roman_h","twitter_site":"@d_roman_h","twitter_misc":{"Written by":"david","Estimated reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/16\/partitions-in-sql-server-function-definitions-left-vs-right\/#article","isPartOf":{"@id":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/16\/partitions-in-sql-server-function-definitions-left-vs-right\/"},"author":{"name":"david","@id":"https:\/\/datablog.roman-halliday.com\/#\/schema\/person\/575f96d2590c3085923ff9e1b565748b"},"headline":"Partitions in SQL Server: Function Definitions, LEFT vs RIGHT","datePublished":"2019-02-16T18:00:11+00:00","mainEntityOfPage":{"@id":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/16\/partitions-in-sql-server-function-definitions-left-vs-right\/"},"wordCount":270,"commentCount":0,"publisher":{"@id":"https:\/\/datablog.roman-halliday.com\/#\/schema\/person\/575f96d2590c3085923ff9e1b565748b"},"keywords":["partition","SQL","T-SQL"],"articleSection":["Databases","SQL Server"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/16\/partitions-in-sql-server-function-definitions-left-vs-right\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/16\/partitions-in-sql-server-function-definitions-left-vs-right\/","url":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/16\/partitions-in-sql-server-function-definitions-left-vs-right\/","name":"Partitions in SQL Server: Function Definitions, LEFT vs RIGHT - Rows Across The Lake","isPartOf":{"@id":"https:\/\/datablog.roman-halliday.com\/#website"},"datePublished":"2019-02-16T18:00:11+00:00","breadcrumb":{"@id":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/16\/partitions-in-sql-server-function-definitions-left-vs-right\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/16\/partitions-in-sql-server-function-definitions-left-vs-right\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/datablog.roman-halliday.com\/index.php\/2019\/02\/16\/partitions-in-sql-server-function-definitions-left-vs-right\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/datablog.roman-halliday.com\/"},{"@type":"ListItem","position":2,"name":"Partitions in SQL Server: Function Definitions, LEFT vs RIGHT"}]},{"@type":"WebSite","@id":"https:\/\/datablog.roman-halliday.com\/#website","url":"https:\/\/datablog.roman-halliday.com\/","name":"Rows Across The Lake","description":"Data &amp; Databases","publisher":{"@id":"https:\/\/datablog.roman-halliday.com\/#\/schema\/person\/575f96d2590c3085923ff9e1b565748b"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/datablog.roman-halliday.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/datablog.roman-halliday.com\/#\/schema\/person\/575f96d2590c3085923ff9e1b565748b","name":"david","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g","caption":"david"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/acddbc676a1d5c73795edcf0627ee39e5aa947da9033b58373e03d93122cb3b7?s=96&d=mm&r=g"}}]}},"_links":{"self":[{"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/posts\/284","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/comments?post=284"}],"version-history":[{"count":2,"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/posts\/284\/revisions"}],"predecessor-version":[{"id":287,"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/posts\/284\/revisions\/287"}],"wp:attachment":[{"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/media?parent=284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/categories?post=284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/datablog.roman-halliday.com\/index.php\/wp-json\/wp\/v2\/tags?post=284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}