『壹』 sql server 中的函數mid有什麼作用
MID() 函數
MID() 函數用於從文本欄位中提取字元。
具體語法參考:
『貳』 SQL Server 和Access區別是什麼
Access具備後台儲存與前台界面開發的功能 90%的功能用於開發軟體 10%用於儲存功能
Access的優勢功能在於前台設計界面的開發 他是由表\查詢\窗體\宏\報表\頁\模塊等等這些組成,
可以進行更方便的設計操作數據.同時Access的儲存功能較小 2G空間 一般區域網聯機不能超過5至8台
多於8台的共享訪問速度會急劇下降 所以一般超過8台以上建議使用
Access開發+SQL server儲存集合的方式
Access作為儲存工具,數據存儲量達到1百兆以上基本壽命就快到了,注意好備份,一旦損壞就沒得救了。
SQL server是用於後台數據儲存數據與查詢的 不具備軟體界面的設計開發 是最理想的大型資料庫儲存工具
而sqlserver資料庫就相當於有個管理員專門管sqlserver倉庫的大門 數據安全性系數很高。
"企業中對Access比較了解或者精通的人可能只有百分之一,而這百分之一的人中,會對公司的軟體系統進行惡意破解或破壞的人不到百分之一。" 所以普通公司(沒有電腦高手)一般Access開發的不經過加密,使用也是沒問題的
以上只是個人觀點:)
『叄』 Access和SqlServer資料庫有什麼異同
oracle是大型資料庫,sql是中型資料庫,mysql是中小型資料庫,access是普通的小型資料庫
還有就是sql語句的語法上面稍微有點詫異,sql包含的函數更加多一點,sql有存儲過程,有作業,有,還有視圖和關系圖
還有些參考
,對於日期欄位欄位
access表示為:#1981-28-12#
sqlserver2000表示為:''1981-02-12''
2,sql語句區別,select ,update 在對單表操作時都差不多,
但多表操作時update語句的區別access與sqlserver中的update語句對比:
sqlserver中更新多表的update語句:
update tab1
set a.name = b.name
from tab1 a,tab2 b
where a.id = b.id;
同樣功能的sql語句在access中應該是
update tab1 a,tab2 b
set a.name = b.name
where a.id = b.id;
即:access中的update語句沒有from子句,所有引用的表都列在update關鍵字後.
更新單表時:都為:
update table1 set ab='12',cd=444 where ....
3,delete語句
access中刪除時用:delete * from table1 where a>2 即只要把select 語句里的select 換成delete就可以了。
sqlserve 中則為: delete from table1 where a>2 即沒有*號
4,as 後面的計算欄位區別
access中可以這樣:select a,sum(num) as kc_num,kc_num*num as all_kc_num 即可以把as後的欄位當作一個資料庫欄位參與計算。
sqlserver 中則為:select a,sum(num) as kc_num,sum(num)*num as all_kc_num 即不可以把as後的欄位當作一個資料庫欄位參與計算。
5,[.]與[!]的區別
access中多表聯合查詢時:select tab1!a as tab1a,tab2!b tab2b from tab1,tab2 ,中間的as可以不要。
sqlserve 中則:select tab1.a as tab1a,tab2.b tab2b from tab1,tab2 ,中間的as可以不要。
6,聯合查詢時,
access中多表聯合查詢:'select a,b from(
select a,b from tab1 where a>3 union select c,d from tab2 ) group by a,b
sqlserve 中則'select a,b from(
select a,b from tab1 where a>3 union select c,d from tab2 ) tmptable group by a,b即要加一個虛的表tmptable,表名任意。---
7,access升級到sqlserver時,
可以用sqlserver的數據導入工具導入數據,但要做必要的處理。
access中的自動編號,不會自動轉換sql中的自動編號,只能轉換為int型,要把它手工改成標識欄位,種子為1,把所有導入被sqlserver轉化成的以n開頭的欄位類型的n去掉,如nvarchar->varchar.把需要有秒類型的日期欄位改成datatime類型(sql會把所有的日期開轉化成smalldatetime型)
8,true與1=1
access用where true表示條件為真,
sqlserver用where 1=1表示條件為真
9,判斷欄位值為空的區別
普通空:
access和sql server一樣 where code is null 或 where code is nol null
條件空:
access:iif([num] is null,0,[num]) 或 iif([num] is null,[num1],[num])
sqlserver: isnull([num],0) 或 isnull([num],[num1])
10,sql語句取子串的區別
access:mid(欄位,n1,[n2]),left(欄位,n),right(欄位,n)
如:select left(cs1,4)+'-'+cs2 as cs3
sqlserver: substring(expression, start, length)
如:select substring(cs1, 1, 2) + substring(cs1, 4, 2) + '-' + cs2 as cs3
『肆』 sql中如何在where字句里截取某個欄位的前幾位字元
sql中在where字句里截取字元方法如下:
1、如果是sqlserver:where left(p.end_time,4) = '2012'。
2、如果是Oracle:where substr(p.end_time,0,4) = '2012'。
舉例:
1、oracle: 'where substr(欄位名,1,2)='''123''''
2、sqlserver: 'where substring(欄位名,1,2)='''123''''
(4)sqlservermid擴展閱讀:
sql中,常用函數介紹:
1、AVG():返回平均值
2、COUNT():返回行數
3、FIRST():返回第一個記錄的值
4、LAST():返回最後一個記錄的值
5、MAX():返回最大值
6、MIN():返回最小值
7、SUM():返回總和
8、UCASE():將某個欄位轉換為大寫
9、LCASE():將某個欄位轉換為小寫
10、MID():從某個文本欄位提取字元
11、LEN():返回某個文本欄位的長度
12、ROUND():對某個數值欄位進行指定小數位數的四捨五入
13、NOW():返回當前的系統日期和時間
14、FORMAT():格式化某個欄位的顯示方式
15、INSTR():返回在某個文本域中指定字元的數值位置
16、LEFT():返回某個被請求的文本域的左側部分
17、RIGHT():返回某個被請求的文本域的右側部分
『伍』 sqlserver在where字句里截取字元
sql中在where字句里截取字元方法如下:
1、如果是sqlserver:where left(p.end_time,4) = '2012'。
2、如果是Oracle:where substr(p.end_time,0,4) = '2012'。
舉例:
1、oracle: 'where substr(欄位名,1,2)='''123''''
2、sqlserver: 'where substring(欄位名,1,2)='''123''''
(5)sqlservermid擴展閱讀:
sql中,常用函數介紹:
1、AVG():返回平均值
2、COUNT():返回行數
3、FIRST():返回第一個記錄的值
4、LAST():返回最後一個記錄的值
5、MAX():返回最大值
6、MIN():返回最小值
7、SUM():返回總和
8、UCASE():將某個欄位轉換為大寫
9、LCASE():將某個欄位轉換為小寫
10、MID():從某個文本欄位提取字元
11、LEN():返回某個文本欄位的長度
12、ROUND():對某個數值欄位進行指定小數位數的四捨五入
13、NOW():返回當前的系統日期和時間
14、FORMAT():格式化某個欄位的顯示方式
15、INSTR():返回在某個文本域中指定字元的數值位置
16、LEFT():返回某個被請求的文本域的左側部分
17、RIGHT():返回某個被請求的文本域的右側部分
『陸』 SQLServer表中數據的復制問題
?
我的一段代碼看對你是否有用
procere Tf_fsxx.drexcel(filename,drcs,drbz,dxnr:string;ybt:boolean);
var
strcs:Tstringlist;
i,j,k:integer;
ks:array of integer;
zdm,nr:array of string;
str1,str2,tem,sqlstr,keyfield:string;
adoquery:Tadoquery;
mid:integer;
ExcelApp: Variant;
p:^Integer;
begin
with Tadoquery.create(nil) do begin
connectionstring:=linkstr;
sql.clear;
sql.add('delete from xt_temdr');
execsql;
free;
end;
strcs:=Tstringlist.create;
strcs.text:=drcs;
setlength(zdm,strcs.count);
setlength(ks,strcs.count);
setlength(nr,strcs.count);
for i:=0 to strcs.count-1 do begin
tem:=strcs.strings[i];
j:=pos(#9,tem);
str1:=(tem,1,j-1);
str2:=(tem,j+1,length(tem)-j);
ks[i]:=strtoint(str1);
zdm[i]:=str2;
end;
for i:=0 to high(zdm) do begin
for j:=0 to 4 do begin
if zdm[i]=yqxxarray[j,0] then begin
zdm[i]:=yqxxarray[j,1];
break;
end;
end;
end;
if ybt then k:=1
else k:=0;
ExcelApp:=CreateOleObject( 'Excel.Application' );
ExcelApp.WorkBooks.Open(FileName);
ExcelApp.WorkSheets[1].Activate;
createplan('正在導入數據……',ExcelApp.WorkSheets[1].UsedRange.Rows.Count-k);
for i:=k+1 to ExcelApp.WorkSheets[1].UsedRange.Rows.Count do begin
for j:=0 to high(ks) do begin
nr[j]:=ExcelApp.cells[i,ks[j]];
end;
with Tadoquery.create(nil) do begin
connectionstring:=linkstr;
sql.clear;
sqlstr:='insert into xt_temdr(';
for j:=0 to high(ks) do begin
sqlstr:=sqlstr+zdm[j]+',';
end;
sqlstr:=(sqlstr,1,length(sqlstr)-1);
sqlstr:=sqlstr+')values(';
for j:=0 to high(ks) do begin
sqlstr:=sqlstr+''''+nr[j]+''',';
end;
sqlstr:=(sqlstr,1,length(sqlstr)-1);
sqlstr:=sqlstr+')';
sql.add(sqlstr);
execsql;
free;
end;
incplan;
end;
excelapp.workbooks.close;
excelapp.quit;
closeplan;
keyfield:='gdzh';
for i:=0 to 4 do begin
if yqxxarray[i,0]=drbz then begin
keyfield:=yqxxarray[i,1];
end;
end;
with Tadoquery.create(nil) do begin
connectionstring:=linkstr;
sql.clear;
sql.add('select * from xt_temdr,khzl where xt_temdr.'+keyfield+'=khzl.'+keyfield);
open;
createplan('正在寫入發送庫',recordcount);
while not eof do begin
tem:=dxnr;
str1:='';
i:=pos('{*',tem);
j:=pos('*}',tem);
while (i>0)and(j>0) do begin
str1:=str1+(tem,1,i-1);
str2:=trim((tem,i+2,j-i-2));
tem:=(tem,j+2,length(tem)-j);
k:=0;
for j:=0 to 4 do begin
if yqxxarray[j,0]=str2 then begin
str2:=yqxxarray[j,1];
k:=1;
break;
end;
end;
if (k=0)and(trim(str2)<>'bxhj') then str2:=str2+'_1';
str1:=str1+fieldbyname(str2).asstring;
i:=pos('{*',tem);
j:=pos('*}',tem);
end;
str1:=str1+tem; //內容
adoquery:=Tadoquery.create(nil);
adoquery.connectionstring:=linkstr;
mid:=incid('xt_fs','id');
adoquery.sql.clear;
adoquery.sql.add('insert into xt_fs(id,fs_hm,fs_xm,fs_nr,fs_zt,fs_yxj,fs_yh,fs_drsj,fs_lx)values(');
adoquery.sql.add(inttostr(mid)+','''+fieldbyname('sjhm').asstring+''',');
adoquery.sql.add(''''+fieldbyname('xm_1').asstring+''',');
adoquery.sql.add(''''+str1+''',');
adoquery.sql.add('''未發送'',');
adoquery.sql.add(current_loginqx+',');
adoquery.sql.add(''''+current_loginname+''',');
adoquery.sql.add(''''+datetostr(date)+' '+timetostr(time)+''',');
adoquery.sql.add(inttostr(fslx)+')');
adoquery.execsql;
with lv.Items.add do begin
caption:=fieldbyname('xm_1').asstring;
subitems.add(fieldbyname('sjhm').asstring);
subitems.add('未發送');
subitems.add(str1);
subitems.add(datetostr(date)+' '+timetostr(time));
subitems.add('');
subitems.add('');
subitems.add(current_loginqx);
subitems.add(current_loginname);
new(p);
p^:=mid;
data:=p;
selected:=true;
makevisible(true);
end;
adoquery.free;
update;
incplan;
next;
end;
closeplan;
free;
end;
strcs.free;
end;
『柒』 在sql sever中,mid函數用於從文本欄位中提取字元, 為什麼會提示「'mid' 不是可以識別的 內置函數名稱。
好像SQLServer裡面, 沒有 mid 這個函數啊。
SUBSTRING倒是可以完成你需要的功能。
SELECT
SUBSTRING('abcdefg',2,3)A,
SUBSTRING('一二三四五六七',2,3)B,
SUBSTRING(N'abcdefg',2,3)NA,
SUBSTRING(N'一二三四五六七',2,3)NB;
A B NA NB
------------------
bcd 二三四 bcd二三四
(1行受影響)
『捌』 sql中where截取字元串字元
不管哪個庫,sql中一般都支持substring 或者它的變種 substr left right mid等