2015-07-21 53 views
0

很多關於如何不需要使用(其中rtrim(columnname)='value'在SQL Server中,使得很多(並且可以在Internet上找到)因爲它會自動將具有或不具有尾隨空格的值視爲相同。SQL服務器如何處理與LEADING空間的文本比較

但是我很難找到關於LEADING空間的信息。如果(無論出於何種原因)我們的數據倉庫在某些varchar/char字段類型的字段上具有前導空格,並且我們需要where子句 - 我們是否仍然需要在哪裏ltrim()?我試圖通過研究其他選項來避免這種巨大的表現。 謝謝

+1

相比較而言,尾部空格被忽略,但是前導空格不是。這很容易測試。選擇1 where'this'='這個' –

+0

是的,我確實執行了這個快速簡單的測試,但是我對這個測試涵蓋了所有類似文本的數據類型的相關測試。所以如果有領先空間的可能性,我只需要執行ltrim,基本上 - 沒有辦法擺脫它? – Isaac

+0

如果你想'測試'='測試',你將不得不在右側做一個ltrim或者在左側添加一個空格。領先的空間不被忽略。 –

回答

0

任何基於文本的數據類型的比較中都不會忽略前導空格。如果您要比較文本列的平等性,最好的選擇是驗證您的數據輸入值,以確保不允許在前面有無用空格的文本。例如,如果數據庫期望用戶從數據庫應用程序期望的可能值列表中鍵入某些內容,則不要讓用戶界面讓用戶輸入自由格式的文本,強制他們輸入其中一個顯式有效值。如果您需要用戶能夠輸入自由形式的文本,但不想要前導空格,請將它們剝離插入。規範化你的數據庫應該可以防止這些類型的問題。