SQLServer轉義問題


經常惆悵於Sql中字符變量的轉義問題,剛剛看到一篇文章感覺不錯,借來分享給大家
 
SELECT Count(0)和SELECT COUNT(*)和SELECT COUNT(??) 意思一樣的。
 
sql單引號問題解決 用轉義
提交sql語句時老因為單引號出錯
百度了一下用兩個單引號替換單引號就行了
 
 
content=content.replace("'","''");
SQL中的轉義字符怎么用呢?
我的數據庫中存在C_這樣開頭的表,也有C開頭的表,我現在使用like查詢出以C_開頭的表,則使用LIKE 'C_%'時,下划線被當作一個任意字符的關鍵字使用,怎么能夠查到我要的數

like 'C\_%' escape '\'

\t是四個字符空一次   如果是4的倍數+1時用\t就那樣了 寫了個方法可以參考使用。在不固定長度的字段使用輸出保證能夠對齊
public String toString() {       return "學生ID:"+ blankStr(10,stuID) + "姓名:"+ blankStr(18,stuName) +"\t性別:"+gender+"\t年齡:"+age+"\t所在班級:"+classes; }
//按列寬補空格,對齊。避免使用\t對齊造成錯位 //參數:列寬度,要格式化的字符串 private String blankStr(int colWidth,String str ) { String blank = ""; int blankLen = colWidth - str.length(); for (int i = 0; i < blankLen; i++) {    str += " "; } return str; }

java轉義字符 收藏 \n 回車(\u000a) \t 水平制表符(\u0009) \b 空格(\u0008) \r 換行(\u000d) \f 換頁(\u000c) \' 單引號(\u0027) \" 雙引號(\u0022) \\ 反斜杠(\u005c) \ddd 三位八進制 \udddd 四位十六進制

上周發現還有其它需要轉義的字符,例如

String sName = "Java轉義字符(補遺)"; sName = sName.replaceFirst("(補遺)",""); out.println(sName);

如果你以為會輸出“Java轉義字符”,那你就錯了,事實上輸出“Java轉義字符()”,我也很奇怪,以為是中英文括號的問題,可是並不是,我不確定是否轉義問題,解決方法是

sName = sName.replaceFirst("\\(補遺\\)","");

如果想查找“_cs”結尾的的賬戶 select * from [user] where loginname like '%_cs'是不行的,_ 被認為是任意的字符, 所以需要轉義字符,有兩種寫法: select * from [user] where loginname like '%[_]cs' select * from [user] where loginname like '%/_cs' escape'/'

通配符 含義 % 包含零個或更多字符的任意字符串。 _ 任何單個字符。 [ ] 指定范圍(例如 [a-f])或集合(例如 [abcdef])內的任何單個字符。 [^] 不在指定范圍(例如 [^a - f])或集合(例如 [^abcdef])內的任何單個字符。
例如:

LIKE 'Mc%' 將搜索以字母 Mc 開頭的所有字符串(如 McBadden)。

LIKE '%inger' 將搜索以字母 inger 結尾的所有字符串(如 Ringer、Stringer)。

LIKE '%en%' 將搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。

LIKE '_heryl' 將搜索以字母 heryl 結尾的所有六個字母的名稱(如 Cheryl、Sheryl)。

LIKE '[CK]ars[eo]n' 將搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。

LIKE '[M-Z]inger' 將搜索以字符串 inger 結尾、以從 M 到 Z 的任何單個字母開頭的所有名稱(如 Ringer)。

LIKE 'M[^c]%' 將搜索以字母 M 開頭,並且第二個字母不是 c 的所有名稱(如 MacFeather)。 使用 ESCAPE 關鍵字定義轉義符。在模式中,當轉義符置於通配符之前時,該通配符就解釋為普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,請使用: WHERE ColumnA LIKE '%5/%%' ESCAPE '/'符號 含義 LIKE '5[%]' 5% LIKE '5%' 5 后跟 0 個或更多字符的字符串 LIKE '[_]n' _n LIKE '_n' an, in, on (and so on) LIKE '[a-cdf]' a, b, c, d, or f LIKE '[-acdf]' -, a, c, d, or f LIKE '[ [ ]' [ LIKE ']' ]

 

SQL查詢中的轉義字符
2007-09-20 08:57
如果想查找“_cs”結尾的的賬戶
select * from [user] where loginname like '%_cs'是不行的,_ 被認為是任意的字符,
所以需要轉義字符,有兩種寫法:
select * from [user] where loginname like '%[_]cs' select * from [user] where loginname like '%/_cs' escape'/'
通配符 含義
% 包含零個或更多字符的任意字符串。
_ 任何單個字符。
[ ] 指定范圍(例如 [a-f])或集合(例如 [abcdef])內的任何單個字符。
[^] 不在指定范圍(例如 [^a - f])或集合(例如 [^abcdef])內的任何單個字符。
例如:
  • LIKE 'Mc%' 將搜索以字母 Mc 開頭的所有字符串(如 McBadden)。
  • LIKE '%inger' 將搜索以字母 inger 結尾的所有字符串(如 Ringer、Stringer)。
  • LIKE '%en%' 將搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
  • LIKE '_heryl' 將搜索以字母 heryl 結尾的所有六個字母的名稱(如 Cheryl、Sheryl)。
  • LIKE '[CK]ars[eo]n' 將搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
  • LIKE '[M-Z]inger' 將搜索以字符串 inger 結尾、以從 M 到 Z 的任何單個字母開頭的所有名稱(如 Ringer)。
  • LIKE 'M[^c]%' 將搜索以字母 M 開頭,並且第二個字母不是 c 的所有名稱(如 MacFeather)。
使用 ESCAPE 關鍵字定義轉義符。在模式中,當轉義符置於通配符之前時,該通配符就解釋為普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,請使用:
WHERE ColumnA LIKE '%5/%%' ESCAPE '/' 
符號 含義
LIKE '5[%]' 5%
LIKE '5%' 5 后跟 0 個或更多字符的字符串
LIKE '[_]n' _n
LIKE '_n' an, in, on (and so on)
LIKE '[a-cdf]' a, b, c, d, or f
LIKE '[-acdf]' -, a, c, d, or f
LIKE '[ [ ]' [
LIKE ']' ]

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/Adi_liu/archive/2007/12/06/1920606.aspx

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/daryl715/archive/2007/02/14/1510014.aspx

使用 SQL 轉義序列

同時提供下列產品的其他版本:
 
使用 SQL 轉義序列

 

 

按照 JDBC API 的定義,Microsoft SQL Server JDBC Driver 支持使用 SQL 轉義序列。轉義序列用於 SQL 語句內,以告訴驅動程序應以不同的方式處理 SQL 字符串的轉義部分。當 JDBC 驅動程序處理 SQL 字符串的轉義部分時,它會將字符串的這一部分轉換為 SQL Server 可以理解的 SQL 代碼。

JDBC API 需要五種類型的轉義序列,JDBC 驅動程序支持所有這些轉義序列:

  • LIKE 通配符文本

  • 函數處理

  • 日期和時間文本

  • 存儲過程調用

  • 外部聯接

JDBC 驅動程序使用的轉義序列語法如下所示:

{keyword ...parameters...}

注意注意:

SQL 轉義處理對於 JDBC 驅動程序始終是打開的。

以下各部分介紹五種類型的轉義序列以及 JDBC 驅動程序如何支持它們。

LIKE 通配符文本

JDBC 驅動程序支持 {escape 'escape character'} 語法,以便將 LIKE 子句通配符用作文本。例如,以下代碼將返回 col3 的值,其中 col2 的值實際上以下划線開始(而不是對其使用通配符)。

ResultSet rst = stmt.executeQuery("SELECT col3 FROM test1 WHERE col2 
LIKE '\\_%' {escape '\\'}");
注意注意:

轉義序列必須位於 SQL 語句的結尾。如果一個命令字符串中有多個 SQL 語句,則轉義序列需要位於每個相關 SQL 語句的結尾。

函數處理

JDBC 驅動程序使用以下語法在 SQL 語句中支持函數轉義序列:

{fn functionName}

其中,functionName 是由 JDBC 驅動程序支持的函數。例如:

SELECT {fn UCASE(Name)} FROM Employee

下表列出當使用函數轉義序列時,JDBC 驅動程序支持的各種函數:

 
字符串函數 數值函數 日期時間函數 系統函數

ASCII

CHAR

CONCAT

DIFFERENCE

INSERT

LCASE

LEFT

LENGTH

LOCATE

LTRIM

REPEAT

REPLACE

RIGHT

RTRIM

SOUNDEX

SPACE

SUBSTRING

UCASE

ABS

ACOS

ASIN

ATAN

ATAN2

CEILING

COS

COT

DEGREES

EXP

FLOOR

LOG

LOG10

MOD

PI

POWER

RADIANS

RAND

ROUND

SIGN

SIN

SQRT

TAN

TRUNCATE

CURDATE

CURTIME

DAYNAME

DAYOFMONTH

DAYOFWEEK

DAYOFYEAR

EXTRACT

HOUR

MINUTE

MONTH

MONTHNAME

NOW

QUARTER

SECOND

TIMESTAMPADD

TIMESTAMPDIFF

WEEK

YEAR

DATABASE

IFNULL

USER

注意注意:

如果您試圖使用數據庫不支持的函數,則將發生錯誤。

日期和時間文本

用於日期、時間和時間戳文本的轉義語法如下所示:

{literal-type 'value'}

其中,literal-type 為以下值之一:

 
文本類型 說明 值格式

d

日期

yyyy-mm-dd

t

時間

hh:mm:ss [1]

ts

時間戳

yyyy-mm-dd hh:mm:ss[.f...]

例如:

UPDATE Orders SET OpenDate={d '2005-01-31'} 
WHERE OrderID=1025

存儲過程調用

JDBC 驅動程序對於存儲過程調用支持 {? = call proc_name(?,...)}{call proc_name(?,...)} 轉義語法,具體取決於您是否需要處理返回參數。

過程是存儲在數據庫中的可執行對象。通常,它是一個或更多的已經預編譯的 SQL 語句。調用存儲過程的轉義序列語法如下所示:

{[?=]call procedure-name[([parameter][,[parameter]]...)]}

其中,procedure-name 指定存儲過程的名稱,parameter 指定存儲過程參數。

有關將 call 轉義序列用於存儲過程的詳細信息,請參閱使用帶有存儲過程的語句

外部聯接

JDBC 驅動程序支持 SQL92 左聯接、右聯接和完全外部聯接語法。外部聯接的轉義序列如下所示:

{oj outer-join}

其中,外部聯接為:

table-reference {LEFT | RIGHT | FULL} OUTER JOIN  
{table-reference | outer-join} ON search-condition

其中,table-reference 為表名,search-condition 為您要用於這些表的聯接條件。

例如:

SELECT Customers.CustID, Customers.Name, Orders.OrderID, Orders.Status 
   FROM {oj Customers LEFT OUTER JOIN 
      Orders ON Customers.CustID=Orders.CustID} 
   WHERE Orders.Status='OPEN'

JDBC 驅動程序支持以下外部聯接轉義序列:

  • 左外部聯接

  • 右外部聯接

  • 完全外部聯接

  • 嵌套外部聯接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM