最近在做一些小型的系統(tǒng),因?yàn)橛玫氖荢SM框架,所以SQL都是自己動手寫的。在做模糊查詢的時候,老大告訴了一個犧牲查詢效率的取巧方法:就是 拼接查詢條件。
如 SELECT * FROM table WHERE id+name+phone LIKE #{param}
上面接在 WHERE 后面的對比條件使用字符串拼接的形式來拼的。但是這里有個坑。
那就是 不同數(shù)據(jù)庫之間 字符串拼接函數(shù)不一樣!
這里做個標(biāo)記 以供以后查詢:
SQL SERVER:用加號(+)拼接字符串的。并且對數(shù)據(jù)類型有要求。一般用CAST()和CONVERT()函數(shù)可用來獲取一個類型的值,并產(chǎn)生另一個類型的值。兩者具體的語法如下:CAST(字段名 AS TYPE) CONVERT(字段名,TYPE)。
MySQL :使用CONCAT(STR1,STR2.....)來拼接字符串的,并且發(fā)現(xiàn)一個有趣的現(xiàn)象,參數(shù)可以直接放int類型,原因不知,可能是因?yàn)榭梢噪[轉(zhuǎn)。
返回結(jié)果為連接參數(shù)產(chǎn)生的字符串。如有任何一個參數(shù)為NULL ,則返回值為 NULL
如果所有參數(shù)均為非二進(jìn)制字符串,則結(jié)果為非二進(jìn)制字符串。 如果自變量中含有任一二進(jìn)制字符串,則結(jié)果為一個二進(jìn)制字符串。一個數(shù)字參數(shù)被轉(zhuǎn)化為與之相等的二進(jìn)制字符串格式;若要避免這種情況,可使用顯式類型 cast, 例如:SELECT CONCAT(CAST(int_col AS CHAR), char_col)
新聞熱點(diǎn)
疑難解答