簡體   English   中英

MS SQL Server比較數字列與字符串值

[英]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引擎(在大多數情況下)將嘗試將最復雜的類型轉換為最簡單的類型,因此比較會更快。 在這種情況下( VARCHARINT ),它將始終將字符串類型轉換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM