編程拼接
㈠ sql怎麼拼接字元串
不同的資料庫,相應的字元串拼接方式不同,通過對比加深一下記憶。
一、MySQL字元串拼接
1、CONCAT函數
語法格式:CONCAT(char c1, char c2, ..., char cn) ,其中char代表字元串,定長與不定長均可以
連接兩個字元串
(1)編程拼接擴展閱讀
字元串函數(String processing function)也叫字元串處理函數,指的是編程語言中用來進行字元串處理的函數,如C,pascal,Visual以及LotusScript中進行字元串拷貝,計算長度,字元查找等的函數。
字元串主要用於編程,概念說明、函數解釋、用法詳述見正文,這里補充一點:字元串在存儲上類似字元數組,所以它每一位的單個元素都是可以提取的,如s=「abcdefghij」,則s[1]=「a」,s[10]="j"。
而字元串的零位正是它的長度,如s[0]=10(※上述功能Ansistring沒有。),這可以給我們提供很多方便,如高精度運算時每一位都可以轉化為數字存入數組。
字元串函數的應用
1、連接運算 concat(s1,s2,s3…sn) 相當於s1+s2+s3+…+sn.
例:concat(『11』,'aa』)='11aa』;
2、求子串。 Copy(s,I,I) 從字元串s中截取第I個字元開始後的長度為l的子串。
例:(『abdag』,2,3)=』bda』
3、刪除子串。過程 Delete(s,I,l) 從字元串s中刪除第I個字元開始後的長度為l的子串。
例:s:=』abcde』;delete(s,2,3);結果s:=』ae』
4、插入子串。 過程Insert(s1,s2,I) 把s1插入到s2的第I個位置
例:s:=abc;insert(『12』,s,2);結果s:=』a12bc』
5、求字元串長度 length(s) 例:length(『12abc』)=5
在ASP中 求字元串長度用 len(s)例: len("abc12")=5
6、搜索子串的位置 pos(s1,s2) 如果s1是s2的子串 ,則返回s1的第一個字元在s2中的位置,若不是子串,則返回0.
例:pos(『ab』,』12abcd』)=3
7、字元的大寫轉換。Upcase(ch) 求字元ch的大寫體。
例:upcase(『a』)=』A』
8、數值轉換為數串。 過程 Str(x,s) 把數值x化為數串s.
例:str(12345,s); 結果s=』12345』
9、數串轉換為數值。 過程val(s,x,I) 把數串s轉化為數值x,如果成功則I=0,不成功則I為無效字元的序數,第三個參數也可不傳
例:val(『1234』,x,I);結果 x:=1234
㈡ sql怎麼把3個結果拼接
1. sql 三條查詢結果 拼接成一個表怎麼做呢
你的第一條語句和第三條語句就是一樣的,只要把 iperiod=12的判斷條件挪到case when 中就租中行。
第二條語句中有分組匯總,這個有兩種方法
(1)直接查詢,查詢完了最後再關聯
(2)利用開窗函數sum()over()(看起來簡單一些,不過可能速度上不會那麼快,而且這個需要測試)
我嘗試寫一個
select '建凱物業'as 帳套, '2015'as 年度,codelass as 科目分類, gl_accsumode as 科目編碼 ,codeode_name as 科目名稱,
case when cendd_c='借' and iperiod=1 then mb else 0.0000 end 1借方,
case when cendd_c='貸' and iperiod=1 then mb else 0.0000 end 1貸方,
case when cendd_c='借' and iperiod=12 then me else 0.0000 end 12借方,
case when cendd_c='貸' and iperiod=12 then me else 0.0000 end 12貸方,
sum(md) over(partition by gl_accsumode) as 總借,
sum(mc) over(partition by gl_accsumode) as 總貸
from gl_accsum,code
where gl_accsumode=codeode and code.igrade=1
order by gl_accsumode
2. 如何將兩條sql的查詢結果拼接在一起顯示
拼接代碼如下:
select * from
(
select * from a)a1,
select * from b)a2,
)a3
延展閱讀:
1. SQL簡介
SQL語言早遲,是結構化查詢語言(Structured Query Language)的簡稱。SQL語言是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。
2. 簡單介紹
SQL語言,是結構化查詢語言(Structured Query Language)的簡稱。SQL語言是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。SQL語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統可以使用相同的結構化查詢語言作為數據輸入與管理的介面。SQL語言語句可以嵌套,這使他具有極大的靈活性和強大的功能。
3. 應用信息
結構化查詢語言SQL(STRUCTURED QUERY LANGUAGE)是最重要的關系資料庫操作語言,並且它的影響已經超出資料庫領域,得到其他領域的重視和採用,如人工智慧領域的數據檢索,第四代軟體開發工具中嵌入SQL的語言等。
4. 編輯本段支持標准
SQL 是1986年10 月由美國國家標准局(ANSI)通過的資料庫語言美國標准,接著,國際標准化組織(ISO)頒布了SQL正式國際標准。1989年4月,ISO提出了具陸型李有完整性特徵的SQL89標准,1992年11月又公布了SQL92標准,在此標准中,把資料庫分為三個級別:基本集、標准集和完全集。
3. sql語句 怎麼把查詢的多條結果用,號拼接起來,不用函數就用SQL語
-- 單列拼接,先查出一行,再加上逗號,接著拼接 查出的下一行
select group_concat(E.SUPPORT)
from ENGINES E
where E.XA IN('YES','NO')
--結果如下:YES,YES,YES,YES,YES,YES,DEFAULT,YES
-- 將查詢的結果中的 "," 號,替換成 "**" 號
select REPLACE(group_concat(E.SUPPORT),',','**')
from ENGINES E
where E.XA IN('YES','NO')
--結果如下:YES**YES**YES**YES**YES**YES**DEFAULT**YES
-- 將查詢的結果中 重復 的記錄 去掉,只剩一條記錄,然後再拼接
select group_concat(DISTINCT(E.SUPPORT))
from ENGINES E
where E.XA IN('YES','NO')
--結果如下:YES,DEFAULT
-- 多列拼接,同一行的先拼接,再加上逗號,接著拼接下一行
select group_concat(E.ENGINE,E.SUPPORT)
from ENGINES E
where E.XA IN('YES','NO')
--結果如下:MRG_MYISAMYES,MyISAMYES,BLACKHOLEYES,CSVYES,MEMORYYES,ARCHIVEYES,InnoDBDEFAULT,PERFORMANCE_SCHEMAYES
4. 三條SQL語句 拼接在一起 顯示出來
用Union ALL :
select tsd.SId, tsl.SName, 人數=COUNT(*) from T_Student tsd,T_School tsl where tsd.SId=tsl.SId group by tsd.SId ,tsl.SName -- (學校人數統計)
Union ALL
select tsd.PId, tst.Position, 人數=COUNT(*) from T_Student tsd,T_Position tst where tsd.PId=tst.PId group by tsd.PId ,tst.Position --(城市人數統計)
Union ALL
select sch.PId, pon.Position, 學校個數=COUNT(*) from T_School sch,T_Position pon where sch.PId=pon.PId grou
㈢ 如何用C語言編寫程序將多個wav文件拼接成一個音頻wav文件並播放
這不是三言兩語的事情,合作wav文件操作並不簡單。要研究好wav文件結構,讀取文件頭,再進行分析和操作。
有兩種辦法:
1.連續播放,例如:
#include<stdio.h>
#include<windows.h>
#include<mmsystem.h>
#pragmacomment(lib,"winmm.lib")
intmain(){
PlaySound("C:\Users\wang\test1.wav",NULL,SND_FILENAME);
PlaySound("C:\Users\wang\test2.wav",NULL,SND_FILENAME);
PlaySound("C:\Users\wang\test3.wav",NULL,SND_FILENAME);
return0;
}
2.系統自帶的「windows movie maker」。運行windows movie maker,然後選擇「導入音頻或音樂」之後把你需要的文件添加進來。然後按照你自己需要排列的順序把這些文件依次拖到下方的時間線上。然後點左上方的「文件」選項,最後保存電影文件即可。
㈣ C語言編寫程序將多個wav文件拼接成一個音頻wav文件並播放
#include<stdio.h>
#include<string.h>
#defineRIFF_SIGN_ID0x46464952ul
#defineWAVE_SIGN_ID0x45564157ul
#defineFMT__SIGN_ID0x20746D66ul
#defineFACT_SIGN_ID0x74636166ul
#defineDATA_SIGN_ID0x61746164ul
#ifndefDWORD
typedefunsignedlongDWORD;
#endif
#ifndefWORD
typedefunsignedshortWORD;
#endif
#ifndefBYTE
typedefunsignedcharBYTE;
#endif
structRIFF_HEADER
{
DWORDRiffID;//資源交換文件標志0x46464952'R','I','F','F'
DWORDRiffSize;//從下個地址開始到文件尾的總位元組數
DWORDRiffFormat;//WAV文件標志0x45564157'W','A','V','E'
};
structWAVE_FORMAT
{
WORDFormatTag;//格式種類(值為1時,表示數據為線性PCM編碼)
WORDChannels;//通道數,單聲道為1,雙聲道為2
DWORDSamplesPerSec;//采樣頻率
DWORDAvgBytesPerSec;//每秒所需位元組數
WORDBlockAlign;//數據塊對齊單位(每個采樣需要的位元組數)
WORDBitsPerSample;//每個采樣需要的bit數
WORDotherInfo;//附加信息(可選,通過Size來判斷有無)
};
structFMT_BLOCK
{
DWORDFmtID;//波形格式標志0x20746D66'f','m','t',''
DWORDFmtSize;//波形格式部分長度(一般為00000010H)
WAVE_FORMATwavFormat;//波形數據格式
};
structUNKNOW_BLOCK
{
DWORDID;//未知塊
DWORDSize;//未知塊長度
};
structFACT_BLOCK
{
DWORDFactID;//可選部分標識0x74636166'f','a','c','t'
DWORDFactSize;//可選部分長度
BYTEData[1];//可選部分數據
};
structDATA_BLOCK
{
DWORDDataID;//數據標志符0x61746164,'d','a','t','a'
DWORDDataSize;//DATA總數據長度位元組
BYTEData[1];//數據
};
BYTE*openWaveFile(constchar*name);
BYTE*getWaveData(BYTE*wav,int*dLen);
voidprintWaveFormat(BYTE*wav);
intsaveWaveFile(constchar*name,BYTE*wav);
BYTE*catWave(BYTE*&wav1,BYTE*&wav2);
size_tgetTotalLen(BYTE*wav);
intmain(intargc,char*argv[])
{
intdLen;
BYTE*data1=openWaveFile("1.wav");
printWaveFormat(data1);
BYTE*data2=openWaveFile("2.wav");
printWaveFormat(data2);
data1=catWave(data1,data2);
printWaveFormat(data1);
saveWaveFile("3.wav",data1);
return0;
}
BYTE*openWaveFile(constchar*name)
{
size_treadByte;
FILE*fp=fopen(name,"rb");
if(fp==NULL)returnNULL;
RIFF_HEADERfh;
if(fread(&fh,sizeof(fh),1,fp)!=1)
{
fclose(fp);
printf("RiffHeader文件長度錯誤 ");
returnNULL;
}
if(fh.RiffFormat!=WAVE_SIGN_ID||fh.RiffID!=RIFF_SIGN_ID)
{
fclose(fp);
printf("文件標識符錯誤ID:%08XFormat:%08X ",fh.RiffID,fh.RiffFormat);
returnNULL;
}
BYTE*r=newBYTE[fh.RiffSize+10],*pr;
if(r==NULL)
{
fclose(fp);
printf("內存申請錯誤 ");
returnNULL;
}
readByte=fread(r,1,fh.RiffSize-4,fp);
if(readByte!=fh.RiffSize-4)
{
delete[]r;
printf("wave文件長度錯誤%d%d ",readByte,fh.RiffSize);
returnNULL;
}
fclose(fp);
FMT_BLOCK*fb=(FMT_BLOCK*)r;
if(fb->FmtID!=FMT__SIGN_ID)
{
printf("格式標識符錯誤或格式大小錯誤ID:%08X ",fb->FmtID);
delete[]r;
returnNULL;
}
if(fb->wavFormat.FormatTag!=1)
{
delete[]r;
printf("不支持的格式Format:%d ",fb->wavFormat.FormatTag);
returnNULL;
}
pr=r+8+fb->FmtSize;
while(1)
{
UNKNOW_BLOCK*ub=(UNKNOW_BLOCK*)pr;
if(ub->ID==FACT_SIGN_ID)
{
printf("Fact標簽length:%d ",ub->Size);
pr+=8+ub->Size;
}
elsebreak;
}
DATA_BLOCK*db=(DATA_BLOCK*)pr;
if(db->DataID!=DATA_SIGN_ID)
{
delete[]r;
printf("數據錯誤 ");
returnNULL;
}
returnr;
}
BYTE*getWaveData(BYTE*wav,int*dLen)
{
UNKNOW_BLOCK*ub=(UNKNOW_BLOCK*)wav;
while(ub->ID!=DATA_SIGN_ID)
{
switch(ub->ID)
{
caseDATA_SIGN_ID:
break;
caseFMT__SIGN_ID:
caseFACT_SIGN_ID:
ub=(UNKNOW_BLOCK*)(((BYTE*)ub)+ub->Size+8);
break;
default:
printf("錯誤標簽%08X ",ub->ID);
returnNULL;
}
}
DATA_BLOCK*db=(DATA_BLOCK*)ub;
*dLen=db->DataSize;
returndb->Data;
}
size_tgetTotalLen(BYTE*wav)
{
size_tr=0;
UNKNOW_BLOCK*ub=(UNKNOW_BLOCK*)wav;
while(1)
{
switch(ub->ID)
{
caseDATA_SIGN_ID:
r+=ub->Size+8;
returnr;
caseFMT__SIGN_ID:
caseFACT_SIGN_ID:
r+=ub->Size+8;
ub=(UNKNOW_BLOCK*)(((BYTE*)ub)+ub->Size+8);
break;
default:
printf("錯誤標簽%08X ",ub->ID);
returnNULL;
}
}
return-1;
}
voidprintWaveFormat(BYTE*wav)
{
intlen;
getWaveData(wav,&len);
FMT_BLOCK*fb=(FMT_BLOCK*)wav;
printf("Wave格式:PCM ");
printf("通道數量:%d ",fb->wavFormat.Channels);
printf("采樣頻率:%dHz ",fb->wavFormat.SamplesPerSec);
printf("每秒所需位元組數:%d位元組 ",fb->wavFormat.AvgBytesPerSec);
printf("數據塊對齊單位:%d位元組 ",fb->wavFormat.BlockAlign);
printf("每個采樣需要的bit數:%dbit ",fb->wavFormat.BitsPerSample);
printf("長度:%.2f秒 ",(double)len/fb->wavFormat.AvgBytesPerSec);
}
BYTE*catWave(BYTE*&wav1,BYTE*&wav2)
{
FMT_BLOCK*fb1=(FMT_BLOCK*)wav2;
constFMT_BLOCK*fb2=(constFMT_BLOCK*)wav2;
if(
fb1->wavFormat.AvgBytesPerSec==fb2->wavFormat.AvgBytesPerSec&&
fb1->wavFormat.BitsPerSample==fb2->wavFormat.BitsPerSample&&
fb1->wavFormat.BlockAlign==fb2->wavFormat.BlockAlign&&
fb1->wavFormat.Channels==fb2->wavFormat.Channels&&
fb1->wavFormat.FormatTag==fb2->wavFormat.FormatTag&&
fb1->wavFormat.SamplesPerSec==fb2->wavFormat.SamplesPerSec)
{
intlen1=getTotalLen(wav1),len2;
BYTE*Data2=getWaveData(wav2,&len2);
BYTE*nD=newBYTE[len1+len2+10];
if(nD==NULL)returnNULL;
memcpy(nD,wav1,len1);
delete[]wav1;
wav1=nD;
BYTE*Data1=getWaveData(wav1,&len1);
DATA_BLOCK*db1=(DATA_BLOCK*)(Data1-8);
db1->DataSize+=len2;
memcpy(Data1+len1,Data2,len2);
returnwav1;
}
returnNULL;
}
intsaveWaveFile(constchar*name,BYTE*wav)
{
FILE*fp=fopen(name,"wb");
if(fp==0)return0;
intlen=getTotalLen(wav);
RIFF_HEADERrh;
rh.RiffFormat=WAVE_SIGN_ID;
rh.RiffID=RIFF_SIGN_ID;
rh.RiffSize=len+4;
fwrite(&rh,sizeof(rh),1,fp);
fwrite(wav,1,len,fp);
fclose(fp);
return1;
}