拆解sql
Ⅰ sql如何進行表的拆分
1.復製表結構及數據到新表
create table 新表 select * from 舊表 where ...
2.只復製表結構到新表
create table 新表 select * from 舊表 where 1=2 (即:讓where條件不成立)
3.復制舊表的數據到新表(假設兩個表結構一樣)
insert into 新表 select * from 舊表
4.復制舊表的數據到新表(假設兩個表結構不一樣)
insert into 新表(欄位1,欄位2,.......) select 欄位1,欄位2,...... from 舊表.
Ⅱ 怎麼把這樣長的sql語句拆分為單條sql語句,這種語句是通過工具生成的還是手動拼出來的
SELECTu.userid,u.name,u.phone
fromhx_useru
LEFTJOIN(SELECT*
fromhx_userrest
WHEREuserrestdate='".$orderhead['serverdate']."')r
onu.userid!=r.userid
INNERJOIN(SELECTuserid
from(SELECTuserid,GROUP_CONCAT(infovaluename)user_info
fromhx_userattrGROUPBYuserid)a
INNERJOIN(SELECTGROUP_CONCAT('%',infovaluename,'%')order_info
fromhx_orderneedinfo
whereorderheadid=$orderheadidandinfokeyperson=2)b
ona.user_infoLIKEIFNULL(b.order_info,'%'))d
onu.userid=d.userid
INNERJOIN(SELECT*
fromhx_userproctclass
WHEREproctclassid=".$orderhead['proctclassid'].")f
onf.userid=u.userid
LEFTJOINhx_sendareasa
onu.userid=sa.userid
WHEREu.useridNOTin(SELECTou.userid
fromhx_servertimes1
INNERJOIN(SELECT*
fromhx_servertime
whereservertimevalue='".$orderhead['servertime']."')s2
ON(s1.ordernum=s2.ordernum-1)or(s1.ordernum=s2.ordernum+1)
INNERJOIN(SELECT*
fromhx_orderhead
whereserverdate='".$orderhead['serverdate']."')h
onh.servertime=s1.servertimevalue
INNERJOINhx_order_userou
onou.orderheadid=h.orderheadid)
ANDusertype=1
ORDERBYabs(fun_getdistance(".$orderhead['latitude'].",".$orderhead['longitude'].",sa.latitude,sa.longitude))ASC,levelDESClimit$limitStart,$pagesize
稍微整理了一下,拆分是不好拆分的,這段語句都是用的子查詢和連接查詢,操作的表比較多,至於你說的手動拼還是用工具這個就不清楚了
Ⅲ SQL Server Oracle 語句編程實現欄位拆解為2行數據
(select substr(col_1,1,instr(col1,'|',1)-1),substr(col_2,1,instr(col2,'|',1)-1) from table) union (select substr(col_1,instr(col1,'|',2)+1,instr(col1,'|',4)-1-instr(col1,'|',2)+1),substr(col_2,instr(col2,'|',2)+1,instr(col2,'|',4)-1-instr(col2,'|',2)+1) from table)用的是oracle哦,取的數據位置可能不對,你調試下把
Ⅳ sql查詢里 怎麼拆分字元串(按「/」拆分)
先建立一個自定義函數,之個函數非常有用,建議收入自已的資料庫
CREATE FUNCTION mysplit--將以某分隔符分段的字串,按指定的順序號提取子串:
java">(@strnvarchar(2000),--源字串
@snint,--提取序號
@Delivarchar(1)--分隔符
)
RETURNSvarchar(100)
AS
BEGIN
declare@firstint,@lastint,@resultvarchar(1000),@sn0int
select@sn0=0,@first=0,@LAST=1,@str=@str+REPLICATE(@DELI,1)
while@sn0!=@sn
begin
select@sn0=@sn0+1,@first=@LAST,@last=charindex(@DELI,@str,@LAST)+1
end
if@last-@first-1<0
set@result=''
else
SET@RESULT=SUBSTRING(@str,@FIRST,@LAST-@FIRST-1)
RETURN(@RESULT)
END
查詢方法:
DECLARE@AVARCHAR(100),@BVARCHAR(100),@CVARCHAR(100)
SELECT
@A=DBO.MYSPLIT('A|B|C',1,'|'),
@B=DBO.MYSPLIT('A|B|C',2,'|'),
@C=DBO.MYSPLIT('A|B|C',3,'|')
SELECT@A,@B,@C
Ⅳ sql數據拆分
第一個
FROM ccc A, # B
就該是
FROM ccc A, #臨時表名 B
Ⅵ SQL server拆分欄位的SQL語句
SQL語句中拆分欄位:
一、語句實現的是將sql表中某個特定的欄位按照欄位內容中的標志拆分成多個欄位。下面的實例是將classname欄位中的內容以「->」為分隔符拆分為兩個部分。
select
ID ,
ClassID = PARSENAME(replace(ClassName,'->' , '.'), 2) ,
StyleID = PARSENAME(replace(ClassName,'->' , '.'), 1)
from tb
二、拆分之前的表格式:
ID classname。
1、 吃嫩草->東湖二等分 。
2、 的年覅->從丁俊暉v剎。
3、 覺得->督促。
4 、和長度->陳代工廠 。
5、 督促vui->大合唱。
三、拆分後的表格式:
ID ClassID StyleID。
1 、吃嫩草 東湖二等分。
2 、的年覅 從丁俊暉v剎。
3 、覺得 督促。
4、和長度 陳代工廠。
5、 督促vui 大合唱。
四、同樣的方法,如果要分成三個、四個或者更多的欄位,只需要修改代碼第三四行的代碼,此方法僅限將某一欄位內的內容按照同一個分隔符拆分。