{"id":5746,"date":"2025-07-30T08:30:35","date_gmt":"2025-07-30T15:30:35","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/azure-sql\/?p=5746"},"modified":"2025-08-27T00:34:56","modified_gmt":"2025-08-27T07:34:56","slug":"announcing-general-availability-of-unistr-function-and-ansi-sql-operator-in-azure-sql","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/azure-sql\/announcing-general-availability-of-unistr-function-and-ansi-sql-operator-in-azure-sql\/","title":{"rendered":"Announcing General Availability of UNISTR function and ANSI SQL || Operator in Azure SQL"},"content":{"rendered":"<p><!--ScriptorStartFragment--><\/p>\n<div class=\"scriptor-paragraph\">We\u2019re excited to announce the <strong>General Availability (GA)<\/strong> of two long-standing capabilities that address critical needs for SQL developers and enterprise customers in Azure SQL Database and Azure SQL Managed Instance, configured with the <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/azure-sql\/managed-instance\/update-policy#always-up-to-date-update-policy\" data-linktype=\"absolute-path\">Always-up-to-date<\/a> update policy:<\/div>\n<div>\n<ul class=\"\">\n<li class=\"scriptor-listItemlist!list-1ec67057-8295-4b92-836a-105eb7801d9f0\">UNISTR function for Unicode character representation<\/li>\n<li class=\"scriptor-listItemlist!list-1ec67057-8295-4b92-836a-105eb7801d9f0\">ANSI SQL string concatenation operator (<code class=\"language-PlainText\">||<\/code>) for standard-compliant string operations<\/li>\n<\/ul>\n<div class=\"scriptor-paragraph\">These additions improve ANSI SQL compliance in Azure SQL, streamline migration from other platforms, and boost developer productivity.<\/div>\n<\/div>\n<div><\/div>\n<div><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2025\/07\/UNISTR_StrConct.png\"><img decoding=\"async\" class=\"aligncenter wp-image-5765 size-large\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2025\/07\/UNISTR_StrConct-1024x683.png\" alt=\"UNISTR StrConct image\" width=\"1024\" height=\"683\" srcset=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2025\/07\/UNISTR_StrConct-1024x683.png 1024w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2025\/07\/UNISTR_StrConct-300x200.png 300w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2025\/07\/UNISTR_StrConct-768x512.png 768w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2025\/07\/UNISTR_StrConct.png 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/div>\n<div>\n<p><!--ScriptorStartFragment--><\/p>\n<h2>UNISTR function: Unicode made easy<\/h2>\n<div class=\"scriptor-paragraph\">The <code class=\"language-PlainText\">UNISTR<\/code> function provides support for Unicode string literals by letting you specify the Unicode encoding value of characters in the string, making it especially useful for working with international or special characters. If you want to include characters like emojis, accented letters, or symbols from non-Latin scripts, <code>UNISTR<\/code> lets you encode them directly using their Unicode values.<\/div>\n<div>\n<ul>\n<li><strong>Returns Unicode characters<\/strong>\u00a0based on the input expression, following the\u00a0<strong>Unicode standard<\/strong>.<\/li>\n<li>Supports\u00a0<strong>escape sequences<\/strong>:\n<ul>\n<li><code>\\xxxx<\/code>\u00a0for UTF-16 codepoints.<\/li>\n<li><code>\\+xxxxxx<\/code>\u00a0for full Unicode codepoints.<\/li>\n<\/ul>\n<\/li>\n<li>Enables easy integration of\u00a0<strong>complex Unicode characters<\/strong> into strings. You can look up Unicode codepoint values in the\u00a0<a href=\"https:\/\/www.unicode.org\/charts\" data-linktype=\"external\">Unicode Code Charts<\/a>.<\/li>\n<\/ul>\n<\/div>\n<h4><strong>Comparison with NCHAR<\/strong><\/h4>\n<ul>\n<li><strong>NCHAR<\/strong>: Converts a\u00a0<strong>single Unicode value<\/strong>\u00a0to a character.<\/li>\n<li><strong>UNISTR<\/strong>: Handles\u00a0<strong>multiple Unicode values and escape sequences<\/strong>, offering\u00a0<strong>greater flexibility<\/strong>\u00a0for constructing strings with diverse characters.<\/li>\n<\/ul>\n<h3>Syntax<\/h3>\n<p><!--ScriptorEndFragment--><\/p>\n<\/div>\n<div>\n<pre class=\"prettyprint language-sql\"><code class=\"language-sql\">UNISTR ( 'character_expression' [ , 'unicode_escape_character' ] )<\/code><\/pre>\n<ul>\n<li>The data type of <em>character_expression<\/em> could be\u00a0<strong>char<\/strong>,\u00a0<strong>nchar<\/strong>,\u00a0<strong>varchar<\/strong>, or\u00a0<strong>nvarchar<\/strong>. For\u00a0<strong>char\u00a0<\/strong>and\u00a0<strong>varchar<\/strong>\u00a0data types, the collation should be a valid\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/relational-databases\/collations\/collation-and-unicode-support?view=sql-server-ver16\" target=\"_blank\" rel=\"noopener\">UTF-8 collation<\/a>\u00a0only.<\/li>\n<li>A single character representing a user-defined Unicode escape sequence. If not supplied, the default value is <code>\\<\/code>.<\/li>\n<\/ul>\n<\/div>\n<div>\n<p><!--ScriptorStartFragment--><\/p>\n<\/div>\n<h3>Examples<\/h3>\n<h4>Example #1:<\/h4>\n<p>In this example, Unicode value used with text literal:<\/p>\n<pre class=\"prettyprint language-sql\"><code class=\"language-sql\">SELECT UNISTR (N'I \\2764 Azure SQL.') AS string_with_unicode <\/code><\/pre>\n<div>Results:<\/div>\n<div>I \u2764\ufe0f Azure SQL.<\/div>\n<h4><\/h4>\n<h4><\/h4>\n<p>&nbsp;<\/p>\n<h4>Example #2:<\/h4>\n<p>In this example, we construct a non-Latin script string using Unicode escape sequence.<\/p>\n<div>\n<pre class=\"prettyprint language-sql\"><code class=\"language-sql\">SELECT UNISTR(N'\\3053\\3093\\306B\\3061\\306F') AS Japanese_Greeting;<\/code><\/pre>\n<div>Results:<\/div>\n<div>\u3053\u3093\u306b\u3061\u306f<\/div>\n<\/div>\n<div><\/div>\n<div><\/div>\n<div>\n<p><div class=\"alert alert-primary\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Info\"><\/i><strong>Note<\/strong><\/p>The UNISTR function is not compatible with legacy code pages, meaning it does not support collations that use a code page.<\/p>\n<p><span class=\"TextRun SCXW240816170 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW240816170 BCX8\">The legacy collations with code page can be <\/span><span class=\"NormalTextRun SCXW240816170 BCX8\">identified<\/span><span class=\"NormalTextRun SCXW240816170 BCX8\"> using the query below:<\/span><\/span><\/p>\n<pre class=\"prettyprint language-sql\"><code class=\"language-sql\">SELECT DISTINCT p.language, p.codepage \r\nFROM sys.fn_helpcollations() AS c CROSS APPLY (VALUES(LEFT(c.name, CHARINDEX('_', c.name)-1), COLLATIONPROPERTY(c.name, 'codepage'))) AS p(language, codepage)\r\nWHERE p.codepage NOT IN (0 \/* Unicode Only collation *\/, 65001 \/* UTF-8 code page *\/);<\/code><\/pre>\n<p><\/div><\/p>\n<\/div>\n<div>\n<p><!--ScriptorEndFragment--><\/p>\n<\/div>\n<div><\/div>\n<div>\n<h2><\/h2>\n<h2>ANSI SQL || Operator: A cleaner way to concatenate<\/h2>\n<div class=\"scriptor-paragraph\">The <code class=\"language-PlainText\">||<\/code> operator is now supported for string concatenation, offering a more readable and standard-compliant alternative to existing methods like <code class=\"language-PlainText\">+<\/code> and <code class=\"language-PlainText\">CONCAT()<\/code>. The\u00a0<code>||<\/code> operator concatenates two or more characters or binary strings, columns, or a combination of strings and column names into one expression. <span class=\"TextRun SCXW215048770 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW215048770 BCX8\">The\u00a0<\/span><code class=\" prettyprinted\"><span class=\"NormalTextRun SCXW215048770 BCX8\"><span class=\"pun\">||<\/span><\/span><\/code><span class=\"NormalTextRun SCXW215048770 BCX8\">ope<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">ra<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">tor<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">\u00a0does not honor the\u00a0<\/span><\/span><span lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/t-sql\/statements\/set-concat-null-yields-null-transact-sql?view=sql-server-ver16\" target=\"_blank\" rel=\"noopener\">SET CONCAT_NULL_YIELDS_NULL<\/a><\/span>\u00a0<span class=\"TextRun SCXW215048770 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW215048770 BCX8\">option<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">\u00a0and always\u00a0<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">behaves as if the ANSI SQL behavior is enabled, yielding\u00a0<code>NULL<\/code>\u00a0if any of the inputs is\u00a0<code>NULL<\/code>.<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">\u00a0<\/span><span class=\"NormalTextRun CommentStart SCXW215048770 BCX8\">This\u00a0<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">ope<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">ra<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">tor<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">\u00a0will work with character strings<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">\u00a0or binary data<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">\u00a0of any supported SQL Server collation<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">.<\/span>\u00a0<span class=\"NormalTextRun SCXW215048770 BCX8\">The\u00a0<\/span><code class=\" prettyprinted\"><span class=\"NormalTextRun SCXW215048770 BCX8\"><span class=\"pun\">||<\/span><\/span><\/code><span class=\"NormalTextRun SCXW215048770 BCX8\">ope<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">ra<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">tor<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">\u00a0supports\u00a0<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">compound assignment\u00a0<\/span><code class=\" prettyprinted\"><span class=\"NormalTextRun SCXW215048770 BCX8\"><span class=\"pun\">||<\/span><\/span><span class=\"NormalTextRun SCXW215048770 BCX8\"><span class=\"pun\">=<\/span><\/span><\/code><span class=\"NormalTextRun AdvancedProofingIssueV2Themed SCXW215048770 BCX8\">similar to<\/span><\/span><span lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/t-sql\/language-elements\/add-equals-transact-sql?view=sql-server-ver16\" target=\"_blank\" rel=\"noopener\">\u00a0+=<\/a><\/span><span class=\"TextRun SCXW215048770 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW215048770 BCX8\">.<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">\u00a0If the\u00a0<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">ope<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">ra<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">nds are of incompatible collation, then an error will be thrown.<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">\u00a0The collation behavior\u00a0<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">is identical to the\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/t-sql\/functions\/concat-transact-sql?view=sql-server-ver16\" target=\"_blank\" rel=\"noopener\">CONCAT<\/a>\u00a0function<\/span><span class=\"NormalTextRun SCXW215048770 BCX8\">\u00a0of character string data.<\/span><\/span><\/div>\n<h3>Syntax<\/h3>\n<pre class=\"prettyprint language-sql\"><code class=\"language-sql\">expression || expression<\/code><\/pre>\n<ul>\n<li><span class=\"TextRun SCXW251165467 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW251165467 BCX8\">The\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/t-sql\/language-elements\/expressions-transact-sql?view=sql-server-ver16\" target=\"_blank\" rel=\"noopener\">expression<\/a>\u00a0is a character or binary expression.\u00a0<\/span><span class=\"NormalTextRun SCXW251165467 BCX8\">Both expressions must be of the same data type, or one expression must be able to be implicitly converted to the data type of the other expression.<\/span>\u00a0<span class=\"NormalTextRun SCXW251165467 BCX8\">If\u00a0<\/span><span class=\"NormalTextRun SCXW251165467 BCX8\">one<\/span>\u00a0<span class=\"NormalTextRun SCXW251165467 BCX8\">ope<\/span><span class=\"NormalTextRun SCXW251165467 BCX8\">ra<\/span><span class=\"NormalTextRun SCXW251165467 BCX8\">nd is\u00a0<\/span><span class=\"NormalTextRun SCXW251165467 BCX8\">of<\/span><span class=\"NormalTextRun SCXW251165467 BCX8\">\u00a0binary type, then an unsupported\u00a0<\/span><span class=\"NormalTextRun SCXW251165467 BCX8\">ope<\/span><span class=\"NormalTextRun SCXW251165467 BCX8\">ra<\/span><span class=\"NormalTextRun SCXW251165467 BCX8\">nd type error will be thrown.<\/span><\/span><\/li>\n<\/ul>\n<h3>Examples<\/h3>\n<h4>Example #1:<\/h4>\n<p>For example, the following query concatenates two strings and returns the result:<\/p>\n<pre class=\"prettyprint language-sql\"><code class=\"language-sql\">SELECT 'Hello ' || 'World!';<\/code><\/pre>\n<p>Results:<\/p>\n<p>Hello World!<\/p>\n<h4>Example #2:<\/h4>\n<p>In this example, multiple character strings are concatenated. If at least one input is a character string, non-character strings will be implicitly converted to character strings.<\/p>\n<pre class=\"prettyprint language-sql\"><code class=\"language-sql\">SELECT \r\n    -- Combine first and last name\r\n    'Jos\u00e8' || ' Doe' AS full_name,\r\n\r\n   -- Construct a detailed order string with ID, timestamp, and unique identifier\r\n    'Order-' || CAST(1001 AS VARCHAR) || '~TS~' || current_timestamp || '~' || NEWID() AS order_details,\r\n   \r\n   -- Handle NULL safely in concatenation  \r\n    'Item-' || NULL AS item_desc;<\/code><\/pre>\n<p>Results:<\/p>\n<table style=\"border-collapse: collapse;width: 95.9704%;height: 105px\">\n<tbody>\n<tr>\n<td style=\"width: 14.0969%\">full_name<\/td>\n<td style=\"width: 60.4424%\">order_details<\/td>\n<td style=\"width: 25.4606%\">item_desc<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 14.0969%\">Jos\u00e8 Doe<\/td>\n<td style=\"width: 60.4424%\">Order-1001~TS~Jul 29 2025 8:33PM~0387F607-1664-4EEB-A4E8-F16B396DDD73<\/td>\n<td style=\"width: 25.4606%\">NULL<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>Example #3:<\/h4>\n<p>In this example, the use of <code class=\" prettyprinted\"><span class=\"pun\">||<\/span><\/code> operator is unsupported when used with only non-character types or when combining binary data with other types.<\/p>\n<pre class=\"prettyprint language-sql\"><code class=\"language-sql\">-- Attempting to concatenate two numeric literals: 1 and 2\r\nSELECT 1 || 2;\r\n\r\n-- Attempting to concatenate integer, string, and binary literals\r\nSELECT 1 || 'a' || 0x4e;<\/code><\/pre>\n<p><span data-contrast=\"auto\">Above queries will fail with <em>error<\/em> messages as below \u2013\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-sql\"><code class=\"language-sql\">The data types int and int are incompatible in the concat operator. \r\nThe data types varchar and varbinary are incompatible in the concat operator.\u00a0\r\n\r\n\r\n<\/code><\/pre>\n<h3>Comparison with + and CONCAT()<\/h3>\n<div class=\"scriptor-paragraph\">Let\u2019s explore how <code class=\"language-PlainText\">||<\/code> differs from <code class=\"language-PlainText\">+<\/code> and <code class=\"language-PlainText\">CONCAT()<\/code> in Azure SQL using real examples.<\/div>\n<p>Sample queries:<\/p>\n<pre class=\"prettyprint language-sql\"><code class=\"language-sql\">-- Binary + String\r\nSELECT CONCAT(0x01, 'a'); -- Returns: a\r\nSELECT 0x01 || 'a'; -- Returns: Error\r\nSELECT 0x01 + 'a'; -- Returns: Error\r\n\r\n-- Binary + Binary\r\nSELECT CONCAT(0x01, 0xff); -- Returns: \u00ff\r\nSELECT 0x01 || 0xff; -- Returns: 0x01FF\r\nSELECT 0x01 + 0xff; -- Returns: 0x01FF\r\n\r\n-- NULL Handling\r\nSELECT CONCAT(NULL, 'a'); -- Returns: 'a'\r\nSELECT NULL || 'a'; -- Returns: NULL\r\nSELECT NULL + 'a'; -- Returns: NULL\r\n\r\n-- Numeric + String\r\nSELECT CONCAT(1, 'a'); -- Returns: '1a'\r\nSELECT 1 || 'a'; -- Returns: '1a'\r\nSELECT 1 + 'a'; -- Returns: Error\r\n\r\n-- Date + String\r\nSELECT CONCAT(CURRENT_TIMESTAMP, 'a'); -- Returns: Jul 29 2025 9:29PMa\r\nSELECT CURRENT_TIMESTAMP || 'a'; -- Returns: Jul 29 2025 9:29PMa\r\nSELECT CURRENT_TIMESTAMP + 'a'; -- Returns: Error<\/code><\/pre>\n<h3>Key Differences<\/h3>\n<table style=\"border-collapse: collapse;width: 100%;height: 144px\">\n<tbody>\n<tr style=\"height: 24px\">\n<td style=\"width: 25%;height: 24px\">Feature<\/td>\n<td style=\"width: 25%;height: 24px\"><code class=\"language-PlainText\">+<\/code> Operator<\/td>\n<td style=\"width: 25%;height: 24px\"><code class=\"language-PlainText\">CONCAT()<\/code> Function<\/td>\n<td style=\"width: 25%;height: 24px\"><code class=\"language-PlainText\">||<\/code> Operator<\/td>\n<\/tr>\n<tr style=\"height: 24px\">\n<td style=\"width: 25%;height: 24px\">ANSI SQL Standard<\/td>\n<td style=\"width: 25%;height: 24px\">\u274c<\/td>\n<td style=\"width: 25%;height: 24px\">\u2705<\/td>\n<td style=\"width: 25%;height: 24px\">\u2705<\/td>\n<\/tr>\n<tr style=\"height: 24px\">\n<td style=\"width: 25%;height: 24px\">NULL Handling<\/td>\n<td style=\"width: 25%;height: 24px\">Returns NULL<\/td>\n<td style=\"width: 25%;height: 24px\">Ignores NULL\/ Empty string<\/td>\n<td style=\"width: 25%;height: 24px\">Returns NULL<\/td>\n<\/tr>\n<tr style=\"height: 24px\">\n<td style=\"width: 25%;height: 24px\">Type Safety<\/td>\n<td style=\"width: 25%;height: 24px\">Not type-safe<\/td>\n<td style=\"width: 25%;height: 24px\">Type-safe<\/td>\n<td style=\"width: 25%;height: 24px\">Type-safe<\/td>\n<\/tr>\n<tr style=\"height: 24px\">\n<td style=\"width: 25%;height: 24px\">Readability<\/td>\n<td style=\"width: 25%;height: 24px\">Moderate<\/td>\n<td style=\"width: 25%;height: 24px\">Verbose<\/td>\n<td style=\"width: 25%;height: 24px\">High<\/td>\n<\/tr>\n<tr style=\"height: 24px\">\n<td style=\"width: 25%;height: 24px\">Portability<\/td>\n<td style=\"width: 25%;height: 24px\">Low<\/td>\n<td style=\"width: 25%;height: 24px\">Moderate<\/td>\n<td style=\"width: 25%;height: 24px\">High<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Why these matters<\/h2>\n<ul>\n<li>Easier Migration &#8211;\u00a0Migrating from other databases becomes smoother with support for <code class=\"language-PlainText\">UNISTR<\/code> and <code class=\"language-PlainText\">||<\/code>, reducing the need for syntax rewrites.<\/li>\n<li>Global Reach &#8211;\u00a0UNISTR simplifies Unicode handling, making it easier to build apps for international markets.<\/li>\n<li>Cleaner Code &#8211; The <code class=\"language-PlainText\">||<\/code> operator improves readability and aligns with modern SQL practices.<\/li>\n<\/ul>\n<div>\n<h2>\ud83d\udcda Learn more<\/h2>\n<\/div>\n<ul>\n<li><a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/t-sql\/functions\/unistr-transact-sql?view=azuresqldb-current\">UNISTR (Transact-SQL) &#8211; SQL Server | Microsoft Learn<\/a><\/li>\n<li><a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/t-sql\/language-elements\/string-concatenation-pipes-transact-sql?view=azuresqldb-current\">|| (String Concatenation) (Transact-SQL) &#8211; SQL Server | Microsoft Learn<\/a><\/li>\n<li><a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/t-sql\/language-elements\/compound-assignment-pipes-transact-sql?view=azuresqldb-current\">||= (Compound assignment) (Transact-SQL) &#8211; SQL Server | Microsoft Learn<\/a><\/li>\n<\/ul>\n<\/div>\n<h2><\/h2>\n<h2>Conclusion<\/h2>\n<p>In this blog post, we announced the General Availability (<strong>GA<\/strong>) of <code>UNISTR<\/code> function and ANSI SQL string concatenation operator (<code>||<\/code>) in Azure SQL. \u202fThe <code>UNISTR<\/code> function allows you to escape Unicode characters, making it easier to work with international text. ANSI SQL <code>||<\/code> operator provides a simple and intuitive way to combine characters or binary data.<\/p>\n<p>These enhancements reflect our commitment to making Azure SQL the most developer-friendly, standards-compliant cloud-first database platform. Whether you&#8217;re modernizing legacy systems, building multilingual apps, or writing cleaner SQL, these features are designed to make your journey smoother.<\/p>\n<p>We hope you will explore these enhancements, apply them in your projects, and share your feedback with us to help us continue improving. Thank you!<\/p>\n<p><!--ScriptorEndFragment--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>We\u2019re excited to announce the General Availability (GA) of two long-standing capabilities that address critical needs for SQL developers and enterprise customers in Azure SQL Database and Azure SQL Managed Instance, configured with the Always-up-to-date update policy: UNISTR function for Unicode character representation ANSI SQL string concatenation operator (||) for standard-compliant string operations These additions [&hellip;]<\/p>\n","protected":false},"author":29335,"featured_media":81,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,619],"tags":[685,684,620],"class_list":["post-5746","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure-sql","category-t-sql","tag-string-concatenation","tag-unicode","tag-unistr"],"acf":[],"blog_post_summary":"<p>We\u2019re excited to announce the General Availability (GA) of two long-standing capabilities that address critical needs for SQL developers and enterprise customers in Azure SQL Database and Azure SQL Managed Instance, configured with the Always-up-to-date update policy: UNISTR function for Unicode character representation ANSI SQL string concatenation operator (||) for standard-compliant string operations These additions [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/posts\/5746","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/users\/29335"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/comments?post=5746"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/posts\/5746\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/media\/81"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/media?parent=5746"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/categories?post=5746"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/tags?post=5746"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}