當前位置:首頁 » 編程語言 » 拼接sql怎麼保證數據類型
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

拼接sql怎麼保證數據類型

發布時間: 2023-04-03 21:44:40

sql 如何將多個列合

1. 列拼接:
1.1 oracle、mysql: 用concat函數,比如concat(a,' ',b,' ','c)
1.2 sqlserver: 用加號,比如select a + " " + b + " " + c from 表
1.3 也可以用資料庫外的程序處理
2.
2.1 最後多了一個union(select * from email後面)
2.2 要保證幾個表(name,di,email)的列是一樣的(數量、類型)

② SQL 合並text類型的數據

不考慮性能問題的話,可以用游標和字元串指針來實現;
舉個簡單的例子給你參考一下,有A和B兩個表,兩個表的結構完全一樣,只有兩個欄位,ID,
Content,欄位類型分別是INT和TEXT
A表
ID
Content
1
A
2
B
3
C
4
D
B表
ID
Content
1

現在就是要將A表中Content欄位的所有記錄合並然腔昌後更新到B表中的第一條記錄,結果應該是
ID
Content
1
ABCD
實現上述功能的腳本如下:
DECLARE
@ID
INT
--定義@ID變數
DECLARE
IDS
CURSOR
FAST_FORWARD
--定義游標,游標名為IDS
FOR
SELECT
ID
FROM
A
ORDER
BY
ID
--
選擇A表中所有ID並氏遲填充游標,比如A表中有三條記錄,ID分別是1,2,3,則將1,2,3填充到游標
OPEN
IDS
--打開游標
FETCH
IDS
INTO
@ID
--取出遊標中的第一個ID值並伍核扒保存到@ID變數,比如游標中有1,2,3三個值,則將1保存到@ID變數
WHILE
@@Fetch_Status
=
0
--進入循環,@@Fetch_Status
=
0表示無法再從游標中獲取任何行則退出循環
BEGIN
DECLARE
@ptrVal_A
VARBINARY(16)
--定義@ptrVal_A變數
DECLARE
@ptrVal_B
VARBINARY(16)
--定義@ptrVal_B變數
SELECT
@ptrVal_A
=
TEXTPTR(Content)
FROM
A
WHERE
ID=@ID
--從A表中讀取當前ID值Content欄位的字元串指針,保存到@ptrVal_A變數
SELECT
@ptrVal_B
=
TEXTPTR(Content)
FROM
B
WHERE
ID=1
--從B表中讀取ID值為1的Content欄位的字元串指針,保存到@ptrVal_B變數
UPDATETEXT
B.Content
@ptrVal_B
NULL
0
A.Content
@ptrVal_A
--更新到B表中ID值為1的記錄的Content欄位,Null表示將新數據追加到Content欄位
FETCH
IDS
INTO
@ID
--取出遊標中的下一個ID值並保存到@ID變數,
重新循環,直到游標中沒有任何行
END
CLOSE
IDS
--關閉游標
DEALLOCATE
IDS
--釋放游標

③ sql中如何防止and 'f'='f'

凡有SQL注入漏洞的程序,都是因為程序要接受來自客戶端用戶輸入的變數或URL傳遞的參數,並且這個變數或參數是組成SQL語句的一部分,
對於用戶輸入的內容或傳遞的參數,我們應該要時刻保持警惕,這是安全領域里的「外部數據不可信任」的原則,縱觀Web安全領域的各種攻擊方式,
大多數都是因為開發者違反了這個原則而導致的,所以自然能想到的,就是從變數的檢測、過濾、驗證下手,確保變數是開發者所預想的。
1、檢查變數數據類型和格式
如果你的SQL語句是類似where id={$id}這種形式,資料庫里所有的id都是數字,那麼就應該在SQL被執行前,檢查確保變數id是int類型;如果是接受郵箱,那就應該檢查並嚴格確保變數一定是郵箱的格式,其他的類型比如日期、時間等也是一個道理。總結起來:只要是有固定格式的變數,在SQL語句執行前,應該嚴格按照固定格式去檢查,確保變數是我們預想的格式,這樣很大程度上可以避免SQL注入攻擊。
比如,我們前面接受username參數例子中,我們的產品設計應該是在用戶注冊的一開始,就有一個用戶名的規則,比如5-20個字元,只能由大小寫字母、數字以及一些安全的符號組成,不包含特殊字元。此時我們應該有一個check_username的函數來進行統一的檢查。不過,仍然有很多例外情況並不能應用到這一準則,比如文章發布系統,評論系統等必須要允許用戶提交任意字元串的場景,這就需要採用過濾等其他方案了。
2、過濾特殊符號
對於無法確定固定格式的變數,一定要進行特殊符號過濾或轉義處理。
3、綁定變數,使用預編譯語句
MySQL的mysqli驅動提供了預編譯語句的支持,不同的程序語言,都分別有使用預編譯語句的方法
實際上,綁定變數使用預編譯語句是預防SQL注入的最佳方式,使用預編譯的SQL語句語義不會發生改變,在SQL語句中,變數用問號?表示,黑客即使本事再大,也無法改變SQL語句的結構

④ 1、sql查詢語句時怎麼把幾個欄位拼接成一個欄位這幾個欄位是整型的。

1、語句如下:

select 欄位A, 欄位B, 欄位A + 欄位B as 欄位C From 表1

註:欄位A加上欄位B的計算列命名為欄位C

2、計算列

計算列由可以使用同一表中的其他列的表達式計算得來。表達式可以是非計算列的列名、常量、函數,也可以是用一個或多個運算符連接的上述元素的任意組合。表達式不能為子查詢。

原題的答案就是「計算列」。

(4)拼接sql怎麼保證數據類型擴展閱讀:

計算列應用范圍

計算列可用於選擇列表、WHERE 子句、ORDER BY 子句或任何可使用正則表達式的其他位置,但下列情況除外:

用作 CHECK、FOREIGN KEY 或 NOT NULL 約束的計算列必須標記為 PERSISTED。如果計算列的值由具有確定性的表達式定義,並且索引列中允許使用計算結果的數據類型,則可將該列用作索引中的鍵列,或者用作 PRIMARY KEY 或 UNIQUE 約束的一部分。

例如,如果表中含有整數列a和b,則可以對計算列a+b創建索引,但不能對計算列a+ DATEPART(dd,GETDATE()) 創建索引,因為在後續調用中,其值可能發生改變。

計算列不能作為 INSERT 或 UPDATE 語句的目標。

資料庫引擎基於使用的表達式自動確定計算列的為 Null 性。即使只有非空列,大多數表達式的結果也「認為」可為空值,因為下溢或溢出生成的結果也可能為空。使用帶AllowsNull屬性的 COLUMNPROPERTY 函數可查明表中任何計算列的為 Null 性。

通過指定 ISNULL (check_expression,constant) 可以將可為空值的表達式轉換為不可為空值的表達式,其中,constant是可替換所有空結果的非空值。

網路.計算列



⑤ SQL的數據類型

【三】SQL的數據類型(表的欄位類型)

3.1 四種基本的常用數據類型(表的欄位類型)

1、字元型,2、數值型,3、日期型,4、大對象型

3.1.1 字元型:

字元類型char和varchar2的區別

SCOTT@ prod> create table t1(c1 char(10),c2 varchar2(10));

SCOTT@ prod> insert into t1 values('a','ab');

SCOTT@ prod> select length(c1),length(c2) from t1; char和varchar2默認以byte為計算單位

LENGTH(C1) LENGTH(C2)

---------- ----------

10 2

3.1.2 數值型:

3.1.3 日期型:

系統安裝後,默認日期格式是DD-MON-RR, RR和YY都是表示兩位年份,但RR是有世紀認知的,它將指定日期的年份和當前年份比較後確定年份是上個世紀還是本世紀(如表)。

當前年份 指定日期 RR格式 YY格式

------------------------------------------------------------------------------

1995 27-OCT-95 1995 1995

1995 27-OCT-17 2017 1917

2001 27-OCT-17 2017 2017

2013 27-OCT-95 1995 2095

3.1.4 LOB型:

大對象是10g 引入的,在11g中又重新定義,在一個表的欄位里存儲大容量數據,所有大對象最大都可能達到4G。CLOB,NCLOB,BLOB都是內部的LOB類型,沒有LONG只能有一列的限制。

保存圖片或電影使用BLOB最好、如果是小說則使用CLOB最好。雖然LONG、RAW也可以使用,但LONG是oracle將要廢棄的類型,因此建議用LOB。

雖說將要廢棄,但還沒有完全廢棄,比如oracle 11g里的一些視圖如dba_views,對於text(視圖定義)仍然沿用了LONG類型。

Oracle 11g重新設計了大對象,推出SecureFile Lobs的概念,相關的參數是db_securefile,採用SecureFile Lobs的前提條件是11g以上版本,ASSM管理等,符合這些條件的。BasicFile Lobs也可以轉換成SecureFile Lobs。較之過去的BasicFile Lobs, SecureFile Lobs有幾項改進:

1)壓縮,2)去重,3)加密。

當create table定義LOB列時,也可以使用LOB_storage_clause指定SecureFile Lobs或BasicFile Lobs,而LOB的數據操作則使用Oracle提供的DBMS_LOB包,通過編寫PL/SQL塊完成LOB數據的管理。

3.2 數據類型的轉換

3.2.1 轉換的需求

什麼情況下需要數據類型轉換

1)如果表中的某欄位是日期型的,而日期又是可以進行比較和運算的,這時通常要保證參與比較和運算的數據類型都是日期型。

2)當對函數的參數進行抽(截)取、拼接,或運算等操作時,需要轉換為那個函數的參數要求的數據類型。

3)製表輸出有格式需求的,可將date類型,或number類型轉換為char類型

4)轉換成功是有條件的,有隱性轉換和顯性轉換兩種方式

3.2.2隱性類型轉換:

是指oracle自動完成的類型轉換。在一些帶有明顯意圖的字面值上,可以由Oracle自主判斷進行數據類型的轉換。

一般規律:

①比較、運算或連接時:

SQL> select empno,ename from emp where empno='7788'

empno本來是數值類型的,這里字元'7788'隱性轉換成數值7788

SQL> SELECT '12.5'+11 FROM al;

將字元型『12.5』運轉成數字型再求和

SQL> SELECT 10+('12.5'||11) FROM al;

將數字型11隱轉成字元與『12.5』合並,其結果再隱轉數字型與10求和

②調用函數時

SQL> select length(sysdate) from al;

將date型運轉成字元型後計算長度

③向表中插入數據時

create table scott. t1 (id int,name char(10),birth date);

insert into scott.t1 values('123',456,'2017-07-15');

按照欄位的類型進行隱式轉換

3.2.3 顯性類型轉換

即強制完成類型轉換(推薦),有三種形式的數據類型轉換函數:

TO_CHAR

TO_DATE

TO_NUMBER

1)日期-->字元

SQL> select ename,hiredate, to_char(hiredate, 'DD-MON-YY') month_hired from emp

where ename='SCOTT';

ENAME HIREDATE MONTH_HIRED

---------- ------------------- --------------

SCOTT 1987-04-19 00:00:00 19-4月 -87

fm壓縮空格或左邊的'0'

SQL> select ename, hiredate, to_char(hiredate, 'fmyyyy-mm-dd') month_hired from emp

where ename='SCOTT';

ENAME HIREDATE MONTH_HIRED

---------- ------------------- ------------

SCOTT 1987-04-19 00:00:00 1987-4 19

其實DD-MM-YY是比較糟糕的一種格式,因為當日期中天數小於12時,DD-MM-YY和MM-DD-YY容易造成混亂。

以下用法也很常見:

SQL> select to_char(hiredate,'yyyy') FROM emp;

SQL> select to_char(hiredate,'mm') FROM emp;

SQL> select to_char(hiredate,'dd') FROM emp;

SQL> select to_char(hiredate,'DAY') FROM emp;

2)數字-->字元:9表示數字,L本地化貨幣字元

SQL> select ename, to_char(sal, 'L99,999.99') Salary from emp where ename='SCOTT';

ENAME SALARY

---------- --------------------

SCOTT 3,000.00

以下四個語句都是一個結果:

SQL> select to_char(1890.55,'$99,999.99') from al;

SQL> select to_char(1890.55,'$0G000D00') from al;

SQL> select to_char(1890.55,'$99G999D99') from al;

SQL> select to_char(1890.55,'$99G999D00') from al; 9和0可用,其他數字不行

3)字元-->日期

SQL> select to_date('1983-11-12', 'YYYY-MM-DD') tmp_DATE from al;

4)字元-->數字:

SQL> SELECT to_number('$123.45','$9999.99') result FROM al;

使用to_number時如果使用較短的格式掩碼轉換數字,就會返回錯誤。不要混淆to_number和to_char轉換。

SQL> select to_number('123.56','999.9') from al;

報錯:ORA-01722: 無效數字

練習:建立t1表,包括出生日期,以不同的日期描述方法插入數據,顯示小於15歲的都是誰

SQL> create table t1 (id int,name char(10),birth date);

insert into t1 values(1,'tim',sysdate);

insert into t1 values(2,'brian',sysdate-365*20);

insert into t1 values(3,'mike',to_date('1998-05-11','yyyy-mm-dd'));

這一句也可以寫成insert into t1 values(3,'mike',to_date('1998-05-11')),因為'1998-05-11'是和當前日期格式匹配的。

insert into t1 values(4,'nelson',to_date('15-2月-12','dd-mon-rr'));

SQL> select * from t1;

ID NAME BIRTH

---------- ---------- -------------------

1 tim 2016-02-25 17:34:00

2brian 1996-03-01 17:34:22

3 mike 1998-05-11 00:00:00

4 nelson 2012-02-15 00:00:00

SQL> select name||'的年齡是'||to_char(months_between(sysdate,birth)/12,99) age from t1

where months_between(sysdate,birth)/12<15;

AGE

-------------------------

tim 的年齡是 0

nelson 的年齡是 4

the end !!!

@jackman 共築美好!

⑥ sql server怎麼定義數據類型

SQLServer 提供了 25 種數據類型:

Binary [(n)],Varbinary [(n)],Char[(n)],Varchar[(n)],Nchar[(n)],Nvarchar[(n)],Datetime,Smalldatetime

Decimal[(p[,s])],Numeric[(p[,s])],Float[(n)],Real,Int,Smallint,Tinyint,Money,Smallmoney,Bit,Cursor

Sysname,Timestamp,Uniqueidentifier,Text,Image,Ntext。

下面來分別介紹這些數據類型:

(1)二進制數據類型

二進制數據包括 Binary、Varbinary 和 Image

Binary 數據類型既可以是固定長度的(Binary),也可以是變長度的。

Binary[(n)] 是 n 位固定的二進制數據。其中,n 的取值范圍是從 1 到 8000。其存儲窨的大小是 n + 4 個位元組。

Varbinary[(n)] 是 n 位變長度的二進制數據。其中,n 的取值范圍是從 1 到 8000。其存儲窨的大小是 n + 4個位元組,不是n 個位元組。

在 Image 數據類型中存儲的數據是以位字元串存儲的,不是由 SQL Server 解釋的,必須由應用程序來解釋。

例如,應用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把數據存儲在 Image 數據類型中。

(2)字元數據類型

字元數據的類型包括 Char,Varchar 和 Text

字元數據是由任何字母、符號和數字任意組合而成的數據。

Varchar 是變長字元數據,其長度不超過 8KB。

Char 是定長字元數據,其長度最多為 8KB。

超過 8KB 的ASCII 數據可以使用Text數據類型存儲。例如,因為 Html 文檔全部都是 ASCII 字元,

並且在一般情況下長度超過 8KB,所以這些文檔可以 Text 數據類型存儲在SQL Server 中。

(3)Unicode 數據類型

Unicode 數據類型包括 Nchar,Nvarchar 和Ntext

在 Microsoft SQL Server 中,傳統的非 Unicode 數據類型允許使用由特定字元集定義的字元。

在 SQL Server安裝過程,允許選擇一種字元集。使用 Unicode 數據類型,列中可以存儲任何由Unicode 標準定義的字元。

在 Unicode 標准中,包括了以各種字元集定義的全部字元。使用Unicode數據類型,

所戰勝的窨是使用非 Unicode 數據類型所佔用的窨大小的兩倍。

在 SQL Server 中,Unicode 數據以 Nchar、Nvarchar 和 Ntext 數據類型存儲。

使用這種字元類型存儲的列可以存儲多個字元集中的字元。當列的長度變化時,應該使用Nvarchar 字元類型,

這時最多可以存儲 4000 個字元。當列的長度固定不變時,應該使用 Nchar 字元類型,同樣,

這時最多可以存儲4000 個字元。當使用 Ntext 數據類型時,該列可以存儲多於 4000 個字元。

(4)日期和時間數據類型

日期和時間數據類型包括 Datetime 和 Smalldatetime兩種類型

日期和時間數據類型由有效的日期和時間組成。

例如,有效的日期和時間數據包括「4/01/98 12:15:00:00:00 PM」和「1:28:29:15:01AM 8/17/98」。

前一個數據類型是日期在前,時間在後一個數據類型是霎時間在前,日期在後。

在 Microsoft SQL Server中,日期和時間數據類型包括Datetime 和 Smalldatetime 兩種類型時,

所存儲的日期范圍是從 1753 年 1 月 1 日開始,到9999 年12 月 31 日結束(每一個值要求 8 個存儲位元組)。

使用 Smalldatetime 數據類型時,

所存儲的日期范圍是 1900年 1 月 1日 開始,到 2079 年 12 月 31 日結束(每一個值要求 4 個存儲位元組)。

日期的格式可以設定。設置日期格式的命令如下:

Set DateFormat {format | @format _var|

其中,format | @format_var 是日期的順序。有效的參數包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默認情況下,日期格式為MDY。

例如,當執行 Set DateFormat YMD 之後,日期的格式為年 月 日 形式;

當執行 Set DateFormat DMY 之後,日期的格式為日 月有年 形式

(5)數字數據類型

數字數據只包含數字。數字數據類型包括正數和負數、小數(浮點數)和整數

整數由正整數和負整數組成,例如 39、25、0-2 和 33967。

在 Micrsoft SQL Server 中,整數存儲的數據類型是Int,Smallint和 Tinyint。

Int 數據類型存儲數據的范圍大於 Smallint 數據類型存儲數據的范圍,

而 Smallint 據類型存儲數據的范圍大於Tinyint 數據類型存儲數據的范圍。

使用 Int 數據存儲數據的范圍是從 -2 147 483 648 到 2 147 483 647(每一個值要求4個位元組存儲空間)。

使用 Smallint 數據類型時,存儲數據的范圍從 -32 768 到 32 767(每一個值要求2個位元組存儲空間)。

使用Tinyint 數據類型時,存儲數據的范圍是從0 到255(每一個值要求1個位元組存儲空間)。

精確小 數數據在 SQL Server 中的數據類型是 Decimal 和 Numeric。這種數據所佔的存儲空間根據該數據的位數後的位數來確定。

在SQL Server 中,近似小數數據的數據類型是 Float 和 Real。例如,三分之一這個分數記作。

3333333,當使用近似數據類型時能准確表示。因此,從系統中檢索到的數據可能與存儲在該列中數據不完全一樣。

=======================================================================================

SQL Server的數據類型介紹(二)

(6)貨幣數據表示正的或者負的貨幣數量 。

在 Microsoft SQL Server 中,貨幣數據的數據類型是Money 和 Smallmoney 。

而Money數據類型要求 8 個存儲位元組,Smallmoney 數據類型要求 4 個存儲位元組。

(7)特殊數據類型

特殊數據類型包括前面沒有提過的數據類型。特殊的數據類型有3種,即Timestamp、Bit 和 Uniqueidentifier。

Timestamp 用於表示SQL Server 活動的先後順序,以二進投影的格式表示。Timestamp 數據與插入數據或者日期和時間沒有關系。

Bit 由 1 或者 0 組成。當表示真或者假、ON 或者 OFF 時,使用 Bit 數據類型。

例如,詢問是否是每一次訪問的客戶機請求可以存儲在這種數據類型的列中。

Uniqueidentifier 由 16 位元組的十六進制數字組成,表示一個全局唯一的。

當表的記錄行要求唯一時,GUID是非常有用。例如,在客戶標識號列使用這種數據類型可以區別不同的客戶。

=======================================================================

用戶定義的數據類型

用戶定義的數據類型基於在 Microsoft SQL Server 中提供的數據類型。當幾個表中必須存儲同一種數據類型時,

並且為保證這些列有相同的數據類型、長度和可空性時,可以使用用戶定義的數據類型。

例如,可定義一種稱為 postal_code 的數據類型,它基於 Char 數據類型。

當創建用戶定義的數據類型時,必須提供三個數:數據類型的名稱、所基於的系統數據類型和數據類型的可空性。

(1)創建用戶定義的數據類型

創建用戶定義的數據類型可以使用 Transact-SQL 語句。系統存儲過程 sp_addtype 可以來創建用戶定義的數據類型。其語法形式如下:

sp_addtype {type},[,system_data_bype][,'null_type']

其中,type 是用戶定義的數據類型的名稱。system_data_type 是系統提供的數據類型,例如 Decimal、Int、Char 等等。

null_type 表示該數據類型是如何處理空值的,必須使用單引號引起來,例如'NULL'、'NOT NULL'或者'NONULL'。

例子:

Use cust

Exec sp_addtype ssn,'Varchar(11)','Not Null'

創建一個用戶定義的數據類型 ssn,其基於的系統數據類型是變長為11 的字元,不允許空。

例子:

Use cust
Exec sp_addtype birthday,datetime,'Null'

創建一個用戶定義的數據類型 birthday,其基於的系統數據類型是 DateTime,允許空。

例子:

Use master
Exec sp_addtype telephone,'varchar(24),'Not Null'
Eexc sp_addtype fax,'varchar(24)','Null'

創建兩個數據類型,即 telephone 和 fax

(2)刪除用戶定義的數據類型

當用戶定義的數據類型不需要時,可刪除。刪除用戶定義的數據類型的命令是 sp_droptype {'type'}。

例子:

Use master
Exec sp_droptype 'ssn'

注意:當表中的列還正在使用用戶定義的數據類型時,或者在其上面還綁定有默認或者規則時,這種用戶定義的數據類型不能刪除。

⑦ sql導入文本文件怎麼確定文本的數據類型

有很多方面
最好使用XML或INI這會快得多。
TXT當然也可以。問題主要出現在孝則文本文檔的內容結構上。如果只是讀出一巧岩棚段00035導入成為35應該是VB內置類型轉換把它轉掉了。解決辦法很簡單。你可以加標識字元
「"」或「'」並連中數據一起載入到變數中就可以了。但一定要注意在VB中「""""」等於棗返「"」而"'"等於'。
除此之外你可以加判斷語句實現轉意字元功能例如PHP中的\n \t等。
祝你成功

⑧ sql server怎麼設置默認的數據類型

方法歷禪/步驟

第一步:設計一張表肢橘塵,新加入一個欄位「test」,數據類型為「numeric(18,1)」,不允許null值(如果你允許為null值的話,你所設置的默認值會無效,會默認為null)

第二步:找到列屬性下的「默認值或綁定」,在後面輸入框中輸入自己設置的默認值,例伍敏如「0」;設置好了以後,保存

第三步:查詢這張表的數據,你會發現新添加的「test」欄位,已經有了值,就是剛剛前面設置的默認值「0」,因為數據類型是"numeric(18,1)"有一位小數,所以值是「0.0」

⑨ 1、sql查詢語句時怎麼把幾個欄位拼接成一個欄位這幾個欄位是整型的。

SQL中字元型欄位的拼接可以使用「+」或者「||」來實現,不過考慮到你問題中這幾個欄位屬於整形欄位,需要先將整形進行數據類型轉換後,再使用「+」或者「||」拼接。

拼接的語法為:

SELECT CAST(COLUMN1 AS VARCHAR(10)) + '-' + CAST(COLUMN2 AS VARCHAR(10)+ '-' + ........) as P FROM TABLE ;

或者:

SELECT CAST(COLUMN1 AS VARCHAR(10)) || '-' + CAST(COLUMN2 AS VARCHAR(10) || '-' ||........) as P FROM TABLE ;

其中CAST函數用於將某種數據類型的表達式顯式轉換為另一種數據類型。CAST()函數的參數是一個表達式,它包括用AS關鍵字分隔的源值和目標數據類型。

語法:CAST (expression AS data_type)

舉個例子:已知表 TableA,含ID、yy、mm、dd四個整數型欄位。

(9)拼接sql怎麼保證數據類型擴展閱讀:

在SQL中,不同的資料庫拼接欄位的方法不盡相同,如

MySQL: CONCAT()

Oracle: CONCAT(), ||

SQL Server: +

CONCAT() 的語法如下:

CONCAT(字串1, 字串2, 字串3, ...): 將字串1、字串2、字串3,等字串連在一起。

請注意,Oracle的CONCAT()只允許兩個參數;

換言之,一次只能將兩個字串串連起來。不過,在Oracle中,我們可以用'||'來一次串連多個字串。

例子1:

MySQL/Oracle:

SELECT CONCAT(region_name,"-",store_name) name FROM Geography

SELECT CONCAT(region_name,store_name) FROM Geography

WHERE store_name = 'Boston';

結果:

'EastBoston

⑩ SQL語句問題動態拼接

請注意一點:
sql中,變數相加,如果其中有一個變數的數據類型是數字型,那麼sql會自動把其他的變數轉換為數字型,然後相加。
通過你的錯誤原因,可以看出,你的代碼中,應該是 @StartIndex 和 @EndIndex 這兩個變數的數據類型是 int型。

修改方式:
把 @StartIndex 和 @EndIndex 分別改成: Cast(@StartIndex as varchar(10)) 和 Cast(@EndIndex as varchar(10))
如果還有其他變數是int型,也參照上邊的方式,強制轉換為字元型就OK了。