T-SQL字元串相加之後被截斷的那點事

来源:http://www.cnblogs.com/wy123/archive/2016/12/24/6217772.html
-Advertisement-
Play Games

本文出處:http://www.cnblogs.com/wy123/p/6217772.html 字元串自身相加, 雖然賦值給了varchar(max)類型的變了,在某些特殊情況下仍然會被“截斷”,這到底是varchar(max)長度的問題還是操作的問題? 1,兩個不超過8000長度的字元串自身相加 ...


 

 

本文出處:http://www.cnblogs.com/wy123/p/6217772.html 

 

字元串自身相加, 雖然賦值給了varchar(max)類型的變了,在某些特殊情況下仍然會被“截斷”,這到底是varchar(max)長度的問題還是操作的問題?

 

1,兩個不超過8000長度的字元串自身相加,其結果長度超過8000之後會被截斷:

  不多說,直接上例子:定義一個字元串,賦值給 varchar(max)類型的變了,字元創長度為4040沒有,任何問題。

 

  把4040長度的字元串複製一份出來,也就是將兩個4040長度的字元串“相加”

 

  發現最後的結果是8000,為什麼?肯定是被截斷了,因為select @strSQL出來的字元串少了一部分。

  varchar(max)定義的沒問題,相加也沒問題,那麼為什麼就被截斷?

  

  補充測試:此種情況下,用concat相加效果也一樣(會被截斷)

  

 

 

2,兩個字元串賦值給varchar(max)類型變數,用變數1+變數2的方式相加,其結果長度超過8000之後不會被截斷:

  上面問題先不回答,換一種操作方式看看結果

  將連個字元串先分別賦值給兩個varchar(max)的變數,將兩個變數相加,賦值給一個varchar(max)的變數,看看最後變數相加的結果

  

 

   我想大概有答案了:

  1,兩個不超過8000長度的“字元串自身”相加,相加之後預設總長度是不超過8000的,超過8000的部分會被截斷

  2,將字元串賦值給varchar(max)變數之後,用“變數相加”的方式相加,賦值給一個varchar(max),其結果是不會被截斷的

 

3,兩個相加的字元串中有一個長度超過了8000,相加之後不會被截斷:

  另外還有一種情況,假如第一個字元串長度超過了8000,加一個任一長度的字元串(不管超不超過8000),最後的結果呢?

  再次做一下論證,試一試就知道了。

  此時第1個字元串長度超過了8000,第2個無所謂超不超過8000,那麼相加之後,計算其LEN,最終的結果是沒有被截斷的。

   補充測試:不截圖了,此種情況下,用concat相加也沒有問題(不會被截斷)

 

4,兩個相加的字元串中有一個長度超過了8000,分別賦值給變數,相加之後不會被截斷:

  

 

 

最終的結論有三個

  1,兩個不超過8000長度的“字元串自身”相加,相加之後預設總長度是不超過8000的,如果相加之後的長度超過8000,超過8000的部分會被截斷

    2,相加的兩個字元串中有一個長度超過了8000,相加兩個字元串本身之後的結果是不會被截斷的。

  3,不管字元串長度如何,將字元串賦值給varchar(max)變數之後,用“變數相加”的方式相加,賦值給第三個varchar(max)變數,其結果是不會被截斷的

 

所以:當無法預計相加的兩個字元串本身的長度是多少,以及相加之後的長度是多少的時候,

   請不要直接對兩個字元串本身進行相加(+)操作,為了確保萬無一失,請將字元串賦值給varchar(max)變數之後,用變數相加,因為用變數相加的方式總是會沒有問題的。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 搞PC項目,最頭疼的莫過於做IE6/7/8的相容性(很蛋疼的事)。而在如今移動端H5的興起中,面對形形色色的機型,各種各樣的品牌手機,導致我嗎們FE們要做各種手機適配問題、樣式相容問題等等(巨煩,找問題還不好找)。以下是在移動端項目之路上所遇到的各種問題: UC瀏覽器——css3的坑 最近在做一個移 ...
  • 在之前的博文《Android中使用ViewPager實現屏幕頁面切換和引導頁效果實現》和《Android中Fragment的兩種創建方式》以及《Android中Fragment與Activity之間的交互(兩種實現方式)》中我們介紹了ViewPager以及Fragment各自的使用場景以及不同的實現 ...
  • 不同於Windows 8應用,Windows 10引入了“漢堡菜單”這一導航模式。說具體點,就拿官方的天氣應用來說,左上角三條橫杠的圖標外加一個SplitView控制項組成的這一導航模式就叫“漢堡菜單”。 本文討論的是如何實現官方的這一樣式(點擊後左側出現一個填充矩形),普通實現網上到處都是,有需要的 ...
  • 一、概述 運行時變更就是設備在運行時發生變化(例如屏幕旋轉、鍵盤可用性及語言)。發生這些變化,Android會重啟Activity,這時就需要保存activity的狀態及與activity相關的任務,以便恢復activity的狀態。 為此,google提供了三種解決方案: 下麵會逐一介紹三種情況,其 ...
  • 當我們要在App實現功能:輸入地名,編碼為經緯度,實現導航功能。 那麼,我需要用到原生地圖中的地理編碼功能,而在Core Location中主要包含了定位、地理編碼(包括反編碼)功能。 在文件中導入 #import <CoreLocation/CoreLocation.h> 地理編碼: 地理反編碼: ...
  • 備註:oracle版本Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 說明:創建臨時表空間註意關鍵字和創建表空間有所差別,語句類似 關於創建語句解說請查看:http://blog.chinaunix.net/uid-20802110 ...
  • 1.地址 2.Units單位 1 配置大小單位,開頭定義了一些基本的度量單位,只支持bytes,不支持bit 2 對大小寫不敏感 3.includes包含 ...
  • 存儲過程語法、概念、介紹;如何處理並記錄複雜存儲過程中發生的錯誤 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...