[英]Ms Sql Server Compare Numeric column with string value
在MS SQL Server中,有什么區別:
select * from Person where Id='7'
和
select * from Person where Id=7
這兩個查詢返回相同的結果。
Id類型為int 。
我們不應該將int與string進行比較嗎?
什么時候應該使用其中之一?
始終將相同的數據類型進行比較,並避免隱式轉換。
SELECT 'Not OK!' WHERE 'text' = 1
-- Result: Conversion failed when converting the varchar value 'text' to data type int.
如數據類型優先級所述,當數據類型不匹配時,SQL引擎(在大多數情況下)將嘗試將最復雜的類型轉換為最簡單的類型,因此比較會更快。 在這種情況下( VARCHAR
與INT
),它將始終將字符串類型轉換為int。
另外,在對具有通過聯接和其他操作進行隱式轉換的SQL進行編碼時,最有可能生成與通過顯式轉換生成的執行計划不同的執行計划。
如果必須比較不同的類型,切記要顯式地強制轉換它們,這不僅是因為前面提到的原因,而且還告訴下一個開發人員數據類型不同的列或表達式。
SELECT 'OK!' WHERE 'text' = CONVERT(VARCHAR(10), 1)
對於某些數據類型,如果您保留隱式轉換,則可能會發現不需要的行為。
DECLARE @BitValue1 BIT = NULL
DECLARE @BitValue2 BIT = 1
SELECT
'Oops!'
WHERE
ISNULL(@BitValue1, -999) = ISNULL(@BitValue2, -999)
-- Result: Oops! (-999 is being converted to bit, which is 1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.