㈠ sql資料庫如何從兩張不同的表中,篩選出不同的欄位,如A表中選a,b兩個欄位,B表中選c,d欄位,求sql語句
selecta,b,c,dfromA表,B表where表a和表b關聯欄位;
㈡ 如何篩選SQL字元串欄位中部分值
一、先說篩選字元串欄位中部分值的記錄。
例如我有一個KKBH(卡口編號)欄位,這是一個字典欄位(對應另一個實體表(卡口表)的編號欄位)。這個欄位的值保存所屬卡口值域{01,02,03}
本來想到的是通過or來實現,這樣需要動態生成SQL語句。
後來想到一個辦法用charindex搜索字元串的辦法。將所有的要查的卡口編號組成類似'01@02'這樣待查字元串。sql查詢時通過charindex篩選出在待查字元串里有的KKBH的記錄。
經測試使用or與使用charindex,兩者在MSSQL中執行效率差不多。
具體實現:
用戶界面查詢需求:可能搜索N個卡口的記錄(N的值域{1,所有卡口個數})。設計這個UI的形式一共三種:
一、一個多選listbox。用戶界面運行時將卡口字典表載入listbox信息。
二、兩個listbox,左邊為待選,右邊為已選,中間加兩個按鈕添加與刪除。用戶界面運行時將卡都字典表載入左邊的listbox。
三、多個Checkbox。可以在界面設計階段直接做死字典表,即有幾個卡口就話幾個checkbox。或者在程序運行根據字典表繪制動態繪制checkbox。
UI的優缺點這里不討論,我這里選擇第三種方式的動態繪制。
在查詢階段根據所選卡口生成待選字元串入:"01@02」
並將此條件傳回後台查詢服務程序
後台查詢服務里只要待查字元串作為參數傳入查詢的SQL語句中(sql片段): charindex(卡口編號,@待查字元串)。當然也可以手動生成SQL方式傳入"charindex(卡口編號,'"+待查字元串+"')".
二、模糊查詢。
使用like的模糊查詢發生效率是很低。
提高的解決辦法與:
一、用full text index 結合contains函數。全文本索引,帶了空間佔用率很高。
二、通過charindex+substring實現簡易模糊查詢。使用substring分段,charindex實現類似like '%關鍵字%'。
㈢ 運用SQL如何提取想要的欄位
這是提取某字元欄位中的字元與之相似的。
SQL=Select 欄位1 from tabel where 欄位1' like '%喜歡%'
由於通配符的緣故,導致我們查詢特殊字元「%」、「_」、「[」、「';」的語句無法正常實現,而把特殊字元用「[ ]」括起便可正常查詢。
㈣ sql 欄位選那種類型好,請個高手回答下
我建議你最好都用varchar類型的,因為這樣就不用為程序代碼轉換數據類型而煩了,而且這幾個欄位都可以用varchar,且最多字的工程名稱是十五個字以內也只是varchar(30)而已,所以建議你用varchar(50)就都搞定了
用代碼建立資料庫表這樣寫:
create table ProjectInfo
(
id varchar(50)primary key,
ProjectName varchar(50) not null,
responsible varchar(50) not null,
customs varchar(50) not null,
contact varchar(50) not null,
phone varchar(50) not null
)
㈤ 如何用Sql語句添加欄位
通用式: alter table [表名] add [欄位名] 欄位屬性 default 預設值 default 是可選參數\x0d\x0a增加欄位: alter table [表名] add 欄位名 smallint default 0 增加數字欄位,整型,預設值為0\x0d\x0aalter table [表名] add 欄位名 int default 0 增加數字欄位,長整型,預設值為0\x0d\x0aalter table [表名] add 欄位名 single default 0 增加數字欄位,單精度型,預設值為0\x0d\x0aalter table [表名] add 欄位名 double default 0 增加數字欄位,雙精度型,預設值為0\x0d\x0aalter table [表名] add 欄位名 Tinyint default 0 增加數字欄位,位元組型,預設值為0\x0d\x0aalter table [表名] add 欄位名 text [null] 增加備注型欄位,[null]可選參數\x0d\x0a\x0d\x0aalter table [表名] add 欄位名 memo [null] 增加備注型欄位,[null]可選參數\x0d\x0a\x0d\x0aalter table [表名] add 欄位名 varchar(N) [null] 增加變長文本型欄位大小為N(1~255)\x0d\x0a\x0d\x0aalter table [表名] add 欄位名 char [null] 增加定長文本型欄位大小固定為255\x0d\x0a\x0d\x0aalter table [表名] add 欄位名 Datetime default 函數增加日期型欄位,其中函數可以是now(),date()等,表示預設值\x0d\x0a\x0d\x0a(上面都是最常用的,還有其他的屬性,可以參考下面的數據類型描述)\x0d\x0a\x0d\x0a刪除欄位: alter table [表名] drop 欄位名\x0d\x0a\x0d\x0a修改變長文本型欄位的大小:alter table [表名] alter 欄位名 varchar(N)\x0d\x0a\x0d\x0a刪除表: drop table [表名]\x0d\x0a\x0d\x0a創建表:\x0d\x0a\x0d\x0asql="CREATE TABLE [表名] ([欄位1,並設置為主鍵] int IDENTITY (1, 1) NOT NULL CONSTRAINT PrimaryKey PRIMARY KEY,"&\x0d\x0a\x0d\x0a"[欄位2] varchar(50),"&\x0d\x0a\x0d\x0a"[欄位3] single default 0,"&\x0d\x0a\x0d\x0a"[欄位4] varchar(100) null,"&\x0d\x0a\x0d\x0a"[欄位5] smallint default 0,"&\x0d\x0a\x0d\x0a"[欄位6] int default 0,"&\x0d\x0a\x0d\x0a"[欄位7] date default date(),"&\x0d\x0a\x0d\x0a"[欄位8] int default 1)"\x0d\x0a\x0d\x0aconn.execute sql\x0d\x0a\x0d\x0a有null 的表示欄位允許零長
㈥ 如何篩選SQL字元串欄位中部分值
如果需要篩選SQL字元串欄位中部分值 應該怎麼做呢?下面就教您篩選SQL字元串欄位中部分值的記錄的方法 供您參考
例如有一個KKBH(卡口編號)欄位 這是一個字典欄位(對應另一個實體表(卡口表)的編號欄位) 這個欄位的值保存所屬卡口值域{ }
本來想到的是通過or來實現 這樣需要動態生成SQL語句
後來想到一個辦法用charindex搜索SQL字元串的辦法 將所有的要查的卡口編號組成類似 @ 這樣待查字元串 sql查詢時通過charindex篩選出在待查SQL字元串里有的KKBH的記錄
經測試使用or與使用charindex 兩者在MSSQL中執行效率差不多
具體實現
用戶界面查詢需求 可能搜索N個卡口的記錄(N的值域{ 所有卡口個數}) 設計這個UI的形式一共三種
一 一個多選listbox 用戶界面運行時將卡口字典表載入listbox信息
二 兩個listbox 左邊為待選 右邊為已選 中間加兩個按鈕添加與刪除 用戶界面運行時將卡都字典表載入左邊的listbox
三 多個Checkbox 可以在界面設計階段直接做死字典表 即有幾個卡口就話幾個checkbox 或者在程序運行根據字典表繪制動態繪制checkbox
UI的優缺點這里不討論 我這里選擇第三種方式的動態繪制
在查詢階段根據所選卡口生成待選SQL字元串入 " @ 」
並將此條件傳回後台查詢服務程序
lishixin/Article/program/MySQL/201311/29554
㈦ 在SQL查詢語句中如何反選欄位
對某張表記錄的反選實際上就對某些記錄行求非交集,而求非交集通常可以用自連接通過not in子查詢、not exists子查詢、left join、right join等方法獲取。
例如下面例子反選t1表中欄位col1>=100的記錄:
12select * from t1 where col1 not in (select col1 from t1 where col1>=100);
12select a.* from t1 a where not exists (select 1 from t1 b where b.id=a.id and b.col1>=100);
123select a.* from t1 a left join (select * from t1 where col1>=100) b on a.id=b.id where b.id is null;
請留意,在大數據表的情況下,not in效率極低應避免使用;not exists在有索引可利用的情況下效率很高,但是無索引時碰到大數據表時運行效率也不行,此時同樣應避免使用;left join或right join因為笛卡爾輸出規則兩表連接後可能會出行檢索出來的記錄行比實際行數增多的情況,編寫相應SQL語句時大家需要注意處理這個問題。
㈧ sql如何按時間段選擇部分欄位
欄位選好的話,直接在where語句裡面添加個時間條件就可以了啊,oracle 裡面直接添加一個,不過前提是你有時間這個欄位,下面假設你的時間叫做 oper_date吧
select
欄位1,
欄位2
from 表 t
where t.oper_date >to_date('2012-02-01 00:00:00','yyyy-MM-dd HH24:mi:ss')
and t.oper_date < to_date('2012-02-29 23:59:59','yyyy-MM-dd HH24:mi:ss')
這個是oracle下的,DB2下的就用timestamp就行了
㈨ sql 選取欄位中某段字元,
如果這個欄位是有規律的,看圖視乎是 開始4個字元+t +3個數字 +t,要獲取2t之間的3個數字比較容易
select SUBSTRING(PRD_NO,6,3) from PRDT; 從第6個字元開始截取3個字元
如果沒有固定規律就比較麻煩了。
㈩ 請教SQL如何選擇一個欄位里某一部分的方法
一樓的是固定長度的
要是之前或之後長度都不固定,可以這樣寫
instr(str,'/',0,-1)找到'/'的位置
select
subStr(
str
,instr(str,'/',1,1)-2
,5)
from
……
這句話是取/附近5個字元的代碼!
有此資料庫不支持instr可以用:
CHARINDEX