sql where 語句查詢
對于你舉例的這個,直接用isnull(語文,''),空(NULL)為''。
where 輔助科目語文 like '%'+isnull(語文,'')+'%'這樣就行。
這樣如果語文是空的話,則拼起來的結果就是'%%',like '%%'可以起到1=1一樣的效果了。
另外也可以使用CASE WHEN
where 輔助科目語文 like (case when isnull(語文,'') = '' then '%' else '%'+語文+'%' end)
case when 就可以實現你的if功能。
有那么麻煩么?使用 columnname like '%' + ISNULL(:參數,'') + '%'
這個肯定夠使用了。只不過你的where條件要把所有的條件都拼進去。
isnull是空則為一個值的語法,不過是SQLSERVER的。ORACLE用NVL,MYSQL應該是IFNULL。如果是空,給兩個單引號,然后和百分號一拼接,肯定是百分號,那么使用like,當然是字符型才可以,空的話條件就是恒等。
SQL語句的where
where id = 1 AND (sno = xxx OR 1 = 1)
用這試一下,sql注入的做法.
可是我要的是當sno沒值傳進來的時候就永遠成立,有值傳進來就要判斷的
這個恐怕做不到。
只能做到說是給sno一個默認值(一個sno永遠不可能的值),然后沒有參數進來的時候,程序自然去判斷1=1從而忽略掉sno = xxxx, 不去判斷后面的sno =xxx,
如果有參數進來的時候,程序首先判斷sno = 傳遞來得值,而忽略后面的1=1。
因此必須確保or前后的語句的次序以實現這個
select * from table where id=1 and (sno = xx OR 1 = 1)
sql注入個人能力范圍內只能到這個程度了。
where 語句
1、SQL語句中沒有Date()這個函數。
2、如果你想取的是服務器時間的話,使用GETDATE()。
where quanzhong=1 and startdate=GETDATE() order by startdate asc
3、如果你是在C語言里想得到客戶端本地時間的話,請使用時間到字串轉換函數DataToStr()。
"……where quanzhong=1 and startdate="+ DataToStr(date()) + " order by startdate asc"
4、startdate 與now()的時間如果使用SQL語句實現,使用類以下的語句:
select * from tablename a where datediff(hour,cast(updatetime as datetime),cast(*time as datetime))
也就是說datediff函數可以算出時間差,更詳細的,請打開SQL2000的幫助文件去看吧。
5、標準的SQL語句(SQL2000)中不存在 Selete …… where …… in……的格式(用法)。
6、建議你安裝一個SQL2000簡體中文版,里面有SQL標準語法及函數的詳細幫助說明。無論你是使用什么數據庫,只要使用到了SQL語句就需要裝個SQL2000,使用它的工具和幫助會使你的學習事半功倍。
7、此外,請注意理解,發送到數據庫的SQL語句是純字串的,里面不能有任何函數。請理解SQL語句的運作。
sql語句where條件查詢
必須指定限定查詢。
格式:
[SELECT] [{DISTINCT}] [* |具體的列別名FROM表名稱] [{WHERE 條件(s)}]
例:查詢出工資大5000的雇員的信息。
數學計算中,工資大于5000:sal > 5000
l SELECT * FROM emp WHERE sal > 4000 ;
輸出如下: