sql的轉義字符單引號


在SQL中,我們都知道單引號 ' 表示字符串的開始和結束符號,如:

select * from students where name = '小明';

但如果字符串里面有單引號時,應該怎么查詢呢?

這是我最近遇到的一個問題,需求是對一張表的數據進行更新,但各個環境的數據並不一致,只能通過拼接的方式生成適合對應環境的變更腳本。更新語句格式如下:

1 update students set grade = '一年級' where grade_id = '01' and grade is null;
2 update students set grade = '二年級' where grade_id = '02' and grade is null;
3 ...
4 --只是舉例,實際就是各個環境字段值不一致,需要先根據環境拼接變更腳本

拼接sql語句的腳本初始如下:

--db2數據庫使用下面的語句
select 'update students set grade = ' || grade || ' where grade_id = ' || grade_id || ' and grade is null;' from classes
where grade_id in (select grade_id from students where grade_id is not null and grade is null);

--mysql數據庫使用下面的語句
select concat('update students set grade = ',grade,' where grade_id = ',grade_id,' and grade is null;') from classes 
where grade_id in (select grade_id from students where grade_id is not null and grade is null);

 結果如下:

可以發現,字符串值沒有單引號,直接運行會報錯。google后找到解決辦法。sql單引號

sql的轉義字符單引號 ' ,可以對字符串中的單引號進行轉義,使其表示字符串值 ' ,這樣如果要查詢 name 為 小'明 的值,其sql語句如下:

select * from students where name = '''';

所以上面的拼接腳本修改如下,即可生成正確的update語句。

1 --db2數據庫使用下面的語句
2 select 'update students set grade = ''' || grade || ''' where grade_id = ''' || grade_id || ''' and grade is null;' from classes
3 where grade_id in (select grade_id from students where grade_id is not null and grade is null);
4 
5 --mysql數據庫使用下面的語句
6 select concat('update students set grade = ''',grade,''' where grade_id = ''',grade_id,''' and grade is null;') from classes 
7 where grade_id in (select grade_id from students where grade_id is not null and grade is null);
8 
9 --注意三個逗號需連續,且與其他字符間的空格

 


免責聲明!

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



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