[英]count row in table with identical value of two column in sql server 2008
[英]How to get a row after passing value into the table in SQL Server 2008?
我有一個名為Test的表
Test
Name Value1(varchar) Value2(varchar)
A 1 9
B 10 19
C 20 39
D 40 45
... ... ...
現在,當我發送“ 8”或“ 21”等值時,如何從測試表中獲取名稱
嗯,為什么您的列為VARCHAR
?
DECLARE @n INT = 8;
SELECT Name FROM dbo.Test
WHERE @n BETWEEN CONVERT(INT, Value1) AND CONVERT(INT, Value2);
如果這些列中還有其他垃圾,則可能必須執行以下操作,以防止SQL Server超越您並試圖將'ascfdgt'
轉換為整數:
DECLARE @n INT = 8;
SELECT Name FROM dbo.Test
WHERE ISNUMERIC(Value1) = 1
AND ISNUMERIC(Value2) = 1
AND @n BETWEEN CASE WHEN ISNUMERIC(Value1) = 1 THEN CONVERT(INT, Value1) END
AND CASE WHEN ISNUMERIC(Value2) = 1 THEN CONVERT(INT, Value2) END;
現在,請修復此列的數據類型,或將這些數字存儲在其他列中。
如果您傳遞A12
並需要查找其中Value1
為A010
且Value2
為A029
行,那么它將變得更加復雜:
DECLARE @n VARCHAR(12) = 'A12';
SELECT Name FROM dbo.Test
WHERE ISNUMERIC(SUBSTRING(Value1, 2, 255)) = 1
AND ISNUMERIC(SUBSTRING(Value2, 2, 255)) = 1
AND CONVERT(INT, SUBSTRING(@n, 2, 255))
BETWEEN CASE WHEN ISNUMERIC(SUBSTRING(Value1, 2, 255)) = 1
THEN CONVERT(INT, SUBSTRING(Value1, 2, 255)) END
AND CASE WHEN ISNUMERIC(SUBSTRING(Value2, 2, 255)) = 1
THEN CONVERT(INT, SUBSTRING(Value2, 2, 255)) END;
看到那是多么丑陋嗎? 能否請您討好,請考慮修復這個糟糕的設計,這樣就不必在這樣的意大利面條查詢中亂扔代碼庫了嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.