Ⅰ sql 取值范圍
也就是說下邊界不一定是0,可能出現-1000,或者-100000,那麼就寫一個很小的數,比如 -999999999999,我就不信有比這個還小的。
或者分開寫用or連接
select * from wap_shiwu_point_info p where p.isvalid=1 and (p.shiwu_discount_points between 0 and #{userablePoints} or p.shiwu_discount_points <=0)
p.shiwu_discount_points <=0應該是沒有問題的吧。
或者把<=分開,分成<和等於,這樣可能也能解決問題,無非就是換種寫法而已。
Ⅱ SQL語句怎樣查詢一個范圍
SQL語句通過「BETWEEN…AND…」語法來查詢一個范圍。
WHERE子句設置查詢條件,過濾掉不需要的數據行。其范圍運算符「BETWEEN…AND…」表示表達式值是否在指定的范圍內,類似的「NOT BETWEEN…AND…」表示表達式值是否不在指定的范圍內。
例如:SELECT * FROM user WHERE age BETWEEN 10 AND 30,用於查詢出user表中age值介於10~30間的數據記錄。
(2)sql查取值的范圍擴展閱讀:
SQL中WHERE子句其它運算符:
1、比較運算符
>、>=、=、<、<=、<>
2、列表運算符
IN (項1,項2……)
NOT IN (項1,項2……)
3、模式匹配符
LIKE、NOT LIKE
4、空值判斷符
IS NULL、IS NOT NULL
5、邏輯運算符
NOT、AND、OR
Ⅲ SQL語句怎樣查詢一個范圍
SQL方法完成數值區間查詢
要求:根據獎金等級表的數值區間,返回獎金對應的等級。
1、鏈接外部數據:數據--現有鏈接--瀏覽更多,在路徑中選擇數據Excel文件和目標工作表,建立數據鏈接。
詳細步驟參考前面所發的SQL相關文章。
2、編寫sql語句。
2.1、使用switch函數,SQL語句為:
select 姓名,獎金,switch(獎金<200,"D級",獎金<300,"C級",獎金<500,"B級",獎金>=500,"A級") as 獎金等級 from [獎金$a1:b11]
switch函數直接判斷數值,若數值小於200,返回D級;數值小於300返回C級;數值小於500,返回B級;餘下的數值條件要變化為>=500返回A級而不是<=700。
2.2、使用iif函數,SQL語句為:
select 姓名,獎金,iif(獎金<200,"D級",iif(獎金<300,"C級",iif(獎金<500,"B級","A級"))) as 獎金等級 from [獎金$a1:b11]
其基本思路和switch函數相同,類似工作表函數if的嵌套。
2.3、使用betweent...and,SQ語句為:
select a.姓名,a.獎金,b.等級 from [獎金$a1:b11] a,[獎金等級$] b where a.獎金 between b.最小值 and b.最大值
以戴蘇明同學為例子,在SQL代碼運行的時候,將戴蘇明同學的獎金一一和獎金等級表中的數值進行對比,符合區間的就返回區間等級。其他同學亦然。
但是,當獎金超出最大值700的時候就會取不到該條數據。
如劉平的獎金701並不在betweent...and的區間內,返回的結果中沒有劉平的數據。
2.4、使用Where比較大小,sql語句為:
select a.姓名,a.獎金,b.等級 from [獎金$a1:b11] a,[獎金等級$] b where a.獎金 >=b.最小值 and a.獎金<=b.最大值
此方法原理和betweent...and一樣,當獎金超過最大值700時,數據將有遺漏(劉平)。
當獎金的最大值為700的時候,以上四種方法都得出同樣的結果。
當獎金最大值超過700的時候,3、4兩個方法將遺漏獎金大於700的數據。
因此,可在設計獎金等級表的時候,可以將最大值700改為一個比較大的數值,使獎金再高也不會超過,則四種方位皆可。
如更改獎金等級表的最大值700為70000,這么大的一個范圍,則四種方法都適用。
Ⅳ 如何使用SQL語句進行范圍的查詢
分類: 電腦/網路 >> 程序設計 >> 其他編程語言
問題描述:
有一個表table的一個fields有這樣的數據S-1-12S-1-10S-1-50S-10-52S-17-85S-10-A我需要查出以S-1-開頭的所有數據(不用LKIE),並且輸入一個范圍,格式是這樣的:第一個輸入:S-1-,第二個輸入S-1-z就能查出S-1-12S-1-10S-1-50這三個數,我使用select * from table where fields >= 's-1-' and fields <= 's-s-z',為什麼結果卻會把所有的都顯示出來?
解析:
你可以使用substring函數 在mysql ,sql server等資料庫系統中都有
比如你這個可以這么寫
select * from table where substring(fields,0,4)='S-1-';
函數的參數有3個 字元串,要截取的開始位元組,結束位元組【如果省略則表示從開始位元組一直到字元串末尾】
Ⅳ SQL Server 里的int型取值范圍是多少
SQL Server 里int型的數值默認長度為4,即4個位元組32位,數據范圍為從-2^31 (-2,147,483,648) 到 2^31 - 1(2,147,483,647) 的整型數據(所有數字)。int 的 SQL-92 同義字為 integer。
在支持整數值的地方支持 int 數據類型。但是,int在某些特殊的情況不能使用,當整數值超過 int 數據類型支持的范圍時,就可以採用 bigint。在 SQL Server 中,int 數據類型是主要的整數數據類型。
(5)sql查取值的范圍擴展閱讀:
使用 +、-、*、/ 或 % 等算術運算符將 int、smallint、tinyint 或 bigint 常量值隱式或顯式轉換為float、real、decimal 或 numeric 數據類型時,SQL Server 計算數據類型和表達式結果的精度時應用的規則有所不同,這取決於查詢是否是自動參數化的。
因此,查詢中的類似表達式有時可能會生成不同的結果。 如果查詢不是自動參數化的,則將常量值轉換為指定的數據類型之前,首先將其轉換為 numeric,該數據類型的精度很大足以保存常量的值。例如,常量值 1 轉換為 numeric (1, 0),常量值 250 轉換為 numeric (3, 0)。
Ⅵ SQL如何實現按數據范圍查詢
SQL裡面 像這種字元串存儲的數字 可以直接比較大小
select * from table where CPLSH>='000100' and CPLSH<='000300'
多個范圍的話就用or,比如
select * from table where (CPLSH>='000100' and CPLSH<='000300') or (CPLSH>='000305' and CPLSH<='000400')
有幾個范圍加幾個范圍