1. 程式人生 > >SQL中 關於&、雙引號、和單引號的解釋

SQL中 關於&、雙引號、和單引號的解釋

下面先簡單地說一下他們的意義。1&是連線運算子,它可以將兩個字串連線成一個字串。
          a="abc" & "def"
       
執行連線運算後,a="abcdef"再如
          a="abc" & temp
       
注意,這裡temp是一個字串變數,假如temp="def",那麼代入上面的式子,則結果為:
          a="abc" & "def"
       
繼續執行連線運算,結果a="abcdef"有時候,可能會有多個連線運算子,只要依次運算即可。如
          a="abc" & "def" & "gh"
       

結果為a="abcdefgh"2)關於雙引號"字串常量兩邊一定要加雙引號,表示這是一個字串。如上面的"abc""def""gh"兩邊的雙引號就都是表示這是一個字串。當然,字串變數名稱兩邊不能再加雙引號了,如上面提到的a="abc" & temp 中的temp是變數,所以兩邊不能加雙引號,如果給temp加上雙引號,那麼它就變成了一個字串常數"temp"了。3)關於單引號'。為什麼會使用單引號呢?這是因為如果發生引號巢狀,內層的雙引號就要改為單引號。下面來看一個例子:
            a="
字串兩邊要加英文雙引號,如"abc",或者……"
       
大家看這句話,原來的意思是:最前面和最後面的
"表示中間是一個字串。"abc"兩邊的雙引號表示abc是一個字串。可是這樣就會發生錯誤了。因為第1個雙引號實際上會和第2個雙引號配套,並不是和大家希望的第4個雙引號配套。那麼怎麼辦呢,此時就需要把內層的雙引號"abc"改為單引號,如下:
           a="
字串兩邊要加英文雙引號,如'abc',或者……"
        
下面要補充的是:
     1.
以上提到的符號都是英文狀態下的,屬於語法中會用到的符號。如果是中文狀態下的符號,就不需要這樣變化。如;
           a="
小王說:我們吃飯去吧"
      
其中的中文符號並不參與語法,所以不需要變化。
     2.
發生引號巢狀時,內層引號一般改為單引號,不過也可以改為兩個雙引號,如下:
           a="
字串兩邊要加英文雙引號,如""abc"",或者……"   
    jjshang
    
釋出時間:2004-7-14 10:46:25    點選:1關於SQL語句中的雙引號、單引號和&
1)先來看一個最簡單的SQL語句
            Insert Into users(username) values("
小王")
        
大家來看一下,這是一個標準的SQL語句,因為username是文字型欄位,所以欄位值兩邊要加雙引號,表示小王是一個字串。

2)可是在ASP中,我們通常這樣寫
            strSql="Insert Into users(username) values('
小王')"
        
此時,前後的雙引號表示中間是一個字串。而小王兩邊的單引號是因為發生了引號巢狀,所以內層引號該為了單引號。3)實際插入時,因為小王通常是從表單中獲取的變數,不過因為變數不能直接寫入字串,必須通過連線符&和字串連線在一起,所以要寫成如下形式:
           myusername=Request.Form("username")
           ……
           strSql="Insert Into users(username) values('" & myusername & "')"
        
很多人此時就糊塗了,為什麼其中又有單引號,又有雙引號啊。簡單的看上面的式子,其實是由如下三部分組成的:字串常數:"Insert Into users(username) values('"
          
字串變數:myusername
          
字串常數:"')"
          
直接理解上面的式子可能比較困難,現在我們變數myusername的值代入就能看清楚了。假如myusername="小王",代入:
           strSql="Insert Into users(username) values('" & "
小王" & "')"
        
然後依次執行其中的連線運算子,結果為:
           strSql="Insert Into users(username) values('
小王')"
        
這就是(2)中提到的正確的SQL語句。到此就能看清楚了:式子中第12個雙引號配套,表示這是一個字串。第34個雙引號配套,也表示是一個字串。而式子中的單引號就是文字型欄位值小王前後的單引號。
4)上面只有一個欄位,下面來看一個有兩個欄位的情況:
           strSql="Insert Into users(username,password)
values('" & myusername & "','" & mypassword & "')"
        
其中 myusername mypassword 是變數。現在假如myusername="小王"mypassword="123456",代入其中,結果為:
           strSql="Insert Into users(username,password) values('" & "
小王" & "','" & "123456" & "')"
        
依次執行連線運算,結果為:
           strSql="Insert Into users(username,password) values('
小王','123456')"     
    
5)文字型欄位值兩邊加引號,日期型兩邊加#,數字、邏輯兩邊什麼都不用加。如下面age是數字,submit_date是日期型。
           strSql="Insert Into users(username,password,age,submit_date)
values('" & myusername & "','" & mypassword & "'," & myage & ",#" & mysubmit_date & "#)"  
       
注意這裡根據欄位的型別兩邊加上相應的符號,或者不加。假如myusername="小王"mypassword="123456"myage=20mysubmit_date="2004-4-1"代入其中,結果為:
           strSql="Insert Into users(username,password,age,submit_date) values('" &
小王" & "','" & "123456" & "'," & 20 & ",#" &
     "2004-4-1" & "#)"
       
這裡的20很特殊,運算時,首先會自動轉換為字串,因為這裡參與運算的都是字串。結果為:
           strSql="Insert Into users(username,password,age,submit_date)
values('" &
小王" & "','" & "123456" & "'," & "20" & ",#" &
     "2004-4-1" & "#)"  
       
依次執行連線運算,結果為:
           strSql="Insert Into users(username,password,age,submit_date) values('
小王','123456',20,#2004-4-1#)"
       
這正是我們需要的標準的SQL語句。          
jjshang
    
釋出時間:2004-7-14 10:47:48    點選:3關於Insert字串很多同學都在這個方面發生了問題,其實主要是因為資料型別和變數在作怪。下面我們就分別講述,雖然說的是Insert語句,但是SelectUpdateDelete語句都是一樣的。假如有下述表格:
         mytabe
        
欄位1    username     字串型(姓名)欄位2    age          數字型(年齡)欄位3    birthday      日期型(生日)欄位4    marry        布林型(是否結婚,結婚為True,未結婚為False欄位5    leixing       字串型(型別)
         1
插入字串型假如要插入一個名為張紅的人,因為是字串,所以Insert語句中名字兩邊要加單撇號,如:
         strsql=“Insert into mytable(username) values(‘
張紅’)”
        
如果現在姓名是一個變數thename,則寫成
         strsql=”Insert into mytable(username) values(‘” & thename & “’)”
        
這裡Insert into mytable(username) values(‘是張紅前面的部分,thename是字串變數,’)
是張紅後面的部分。thename變數替換成張紅,再用&將三段連線起來,就變成了
strsql=“Insert into mytable(username) values(‘
張紅’)”如果要插入兩個欄位,如姓名為張紅,型別為學生
         strsql=“Insert into mytable(username,leixing) values(‘
張紅’,’學生’)”
        
如果現在姓名是一個變數thename,型別也是一個變數thetype,則寫成:
         strsql=”Insert into mytable(username,leixing)
values(‘” & thename & “’,’” & thetype & “’)”
        
和第一個例子一樣,將thenamethetype替換後,再用連線符,就連線成和上面一樣的字串了。
         2
插入數字型假如插入一個年齡為12的記錄,要注意數字不用加單撇號:
         strsql=“Insert into mytable(age) values(12)”
        
如果現在年齡是一個變數theage,則為:
         strsql=“Insert into mytable(age) values(“ & theage & “)”
        
這裡Insert into mytable(age) values(12前面的部分,theage是年齡變數,)12後面部分。theage替換,再用&連線符將三部分連線起來,就變為了和上面一樣的字元。
         3
插入日期型日期型和字串型類似,但是要將單撇號替換為#號。(不過,Access資料庫中用單撇號也可以)
         strsql=“Insert into mytable(birthday) values(#1980-10-1#)”
        
如果換成日期變數thedate
         strsql=“Insert into mytable(birthday) values(#” & thedate & “#)”
         4
插入布林型布林型和數字型類似:只不過只有兩個值 TrueFalse,如:
         strsql=“Insert into mytable(marry) values(True)”
        
如果換成布林變數themarry
         strsql=“Insert into mytable(birthday) values(” & themarry& “)”
         5
綜合示例插入一個姓名為張紅,年齡為12的記錄
         strsql=“Insert into mytable(username,age) values(‘
張紅’,12)”
        
仔細注意上式:因為姓名是字串,所以張紅兩邊加了單撇號;年齡是數字,所以沒有加單撇號。如果換成字串變數thename和數字變數theage,則變為:
         strsql=“Insert into mytable(username,age) values(‘” & thename & “’,” & theage & “)”
        
注意上式,總之,替換變數,再連線後要完成和上邊一樣的字串。
         6
小竅門有一位同學摸索出了一個小竅門,要把下面的語句題換成變數的寫法:
         strsql=“Insert into mytable(username) values(‘
張紅’)”
        
第一步:先把張紅抹去,在原位置加兩個引號
         strsql=“Insert into mytable(username) values(‘”   “’)”
        
第二步:在中間新增兩個連線符&
         strsql=“Insert into mytable(username) values(‘” & & “’)”
        
第三步:把變數寫在兩個連線符之間
         strsql=“Insert into mytable(username) values(‘” & thename & “’)”
    
zzx
    
釋出時間:2004-7-10 17:04:08    點選:3
      re
:關於SQL語句的解釋那請問尚老師:如果N=1    ,那 “& n &" 後它是什麼型別呢?如果N=”1“    ,那 “& n &" 後它是什麼型別呢?如果N=#2004-7-10#,那 “& n &" 後它是什麼型別呢?
       "& n &"
N資料型別相同嗎
jjshang
    
釋出時間:2004-7-10 18:14:50    點選:1關於資料型別你提的問題很好。這裡其實涉及到一個自動轉換型別的問題。連線符&是將兩個字串或者字串變數連線到一起的,所以這裡的n如果不是字串型別,它首先會自動轉換為字串型別,然後才參與連線運算。下面舉個例子
        a="& n
       
這裡假如n=1,它是數字型別,所以首先轉換為字串型別,該句相當於 a="& "1"。然後執行連線運算,最後a="這裡假如n="1",則不用轉換型別,直接為a="假如n=#2003-3-2#,則也要先自動轉換為字串型別,相當於 a="& "2003-3-2",然後執行連線運算,結果為a="    
    
總之,&是字串運算子,運算的各個引數都要是字串型別。返回Top

7、關於連線符&的詳解
jjshang
    
釋出時間:2004-4-19 10:20:51    點選:3關於連線符&的詳解舉幾個連線符的例子:1)字串和字串連線
          temp="
中國" & "人民"
        
結果為temp="中國人民",其實就是將其中的" & "抹去,連線為一個字串。2)字串和變數連線
          temp="
中國" & varA
        
假如varA="人民",結果為temp="中國人民"3)多個字串和變數連線
          temp="
中國" & "人民" & "萬歲"
        
其實,從前往後,依次執行,結果為temp="中國人民萬歲"
    
4)假如,出現引號巢狀,內層引號一般改為單引號
          temp="
美麗的'祖國'" & "日新月異"
        
結果為temp="美麗的'祖國'日新月異"。其實,就是將其中的" & "抹去,連線為一個字串。5)假如有三個
          temp="
美麗的" & "'祖國'" & "日新月異"
        
結果為temp=="美麗的'祖國'日新月異"。其實,就是將2" & "抹去。這一句等同於
          temp="
美麗的'" & "祖國" & "'日新月異"
    
6)假如祖國是存在一個變數中country,則上一句修改為
          temp=="
美麗的'" & country & "'日新月異"
    
7)當字串和數字連線
        temp="
您的年齡是" & 23
       
其實&是把兩個字串連線在一起的,但是後一個確是數字,怎麼辦呢?這裡會自動把23首先轉換為字串,如下:
        temp="
您的年齡" & "23"
    
然後再執行連線運算,結果為temp="您的年齡23"
    
請通過以上示例,反覆體會連線符和引號的作用。

轉自:http://hi.baidu.com/hpyfei/blog/item/1fd479fe13aef22f5c6008af.html