當前位置:首頁 » 編程語言 » sql分段查詢
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql分段查詢

發布時間: 2022-07-02 02:41:19

sql 查詢日期分段問題

這個我做過個統計模塊,可以實現,貼其中1個時間段SQL整理函數你理解下,不理解可以hi我

function global_sql($type, $date, $from, $to, $vol){
if($type==0){
if ($date==0){
$sql = "DATE(".$vol.")=DATE(now())";
}else if ($date==1){
$sql = "DATE(".$vol.")=DATE_SUB(now(),Interval 1 DAY)";
}else if ($date==2){
$from = date("Y-m-",time()).$from;
$to = date("Y-m-",time()).$to;
$sql = "DATE(".$vol.")>='".$from."' and DATE(".$vol.")<='".$to."'";
}
}else if ($type==1){ #天
if ($date==0){
$sql = "DATE(".$vol.")=DATE(now())";
}else if ($date==1){
$sql = "DATE(".$vol.")=DATE(DATE_SUB(now(),Interval 1 DAY))";
}else if ($date==2){
$from = date("Y-m-",time()).$from;
$to = date("Y-m-",time()).$to;
$sql = "DATE(".$vol.")>='".$from."' and DATE(".$vol.")<='".$to."'";
}
}else if ($type==2){ #周
if ($date==0){
$sql = "DATE_FORMAT(".$vol.",'%Y%u')=DATE_FORMAT(now(),'%Y%u')";
}else if ($date==1){
if ( date("W",time())<=1 ){
$temp = (date("Y",time())-1).(52);
}else{
$temp = date("Y",time()).(date("W",time())-1);
}

$sql = "DATE_FORMAT(".$vol.",'%Y%u')='".$temp."'";
}else if ($date==2){
$from = date("Y",time()).$from;
$to = date("Y",time()).$to;
$sql = "DATE_FORMAT(".$vol.",'%Y%u')>='".$from."' and DATE_FORMAT(".$vol.",'%Y%u')<='".$to."'";
}
}else if ($type==3){ #月
if ($date==0){
$sql = "DATE_FORMAT(".$vol.",'%Y%c')=DATE_FORMAT(now(),'%Y%c')";
}else if ($date==1){
if ( date("n",time()) <= 1 ){
$temp = (date("Y",time())-1).(12);
}else{
$temp = date("Y",time()).(date("n",time())-1);
}

$sql = "DATE_FORMAT(".$vol.",'%Y%c')=".$temp;
}else if ($date==2){
$from = date("Y",time()).$from;
$to = date("Y",time()).$to;
$sql = "DATE_FORMAT(".$vol.",'%Y%c')>=".$from." and DATE_FORMAT(".$vol.",'%Y%c')<=".$to;
}
}else if ($type==4){ #季度
$year = date("Y",time());
if ($date==0){
$temp = re_quarter( quarter( date("n",time()) ) );
$sql = "DATE_FORMAT(".$vol.",'%Y%c') in (".$year.$temp[0].",".$year.$temp[1].",".$year.$temp[2].")";
}else if ($date==1){
if ( date("n",time()) <= 1 ){
$year -= 1;
$temp = re_quarter( quarter( 4 ) );
}else{
$temp = re_quarter( quarter( date("n",time())-1 ) );
}

$sql = "DATE_FORMAT(".$vol.",'%Y%c') in (".$year.$temp[0].",".$year.$temp[1].",".$year.$temp[2].")";
}else if ($date==2){
$year = date("Y",time());
#$sql = "DATE_FORMAT(".$vol.",'%Y%c')>=".$from." and DATE_FORMAT(".$vol.",'%Y%c')<=".$to;
$sql = "year(".$vol.")=".$year." and (quarter(".$vol.")>=".$from." and quarter(".$vol.")<=".$to.")";
}
}else if ($type==5){ #年
if ($date==0){
$sql = "YEAR(".$vol.")=YEAR(now())";
}else if ($date==1){
$sql = "YEAR(".$vol.")=YEAR(now())-1";
}else if ($date==2){
$sql = "YEAR(".$vol.")>=".$from." and YEAR(".$vol.")<=".$to;
}
}
return $sql;
}

⑵ 怎樣用SQL語句查詢以20%來分段查詢數據,如查詢該表中數據數量20%到40%的數據怎查來。

我贊成的是:select * from (select top (select convert(int,count(selfid)*0.4) from s_menu) * from s_menu ) a where selfid not in(select top (select convert(int,count(selfid)*0.2) from s_menu) selfid from s_menu)

不贊成:
select * from t_qkxx where lsh in (select top 40 percent lsh from t_qkxx where lsh not in (select top 20 percent lsh from t_qkxx))

原因:不贊成中的一條語句寫錯了。top20指的是前20位。如果列數只有19的話就要出發溢出的異常

⑶ SQl語句查出來的字元串怎麼分段

select
decode(f1,'1','1,你好','1,2','1、你好;2、我很好;'
from al;

試試DECODE函數

⑷ sql 查詢分段日期

select 會員姓名,[其它列], cast( month(sbirthday) as varchar(20)) +'-'+ cast( day(sbirthday) as varchar(20)) as 日期

from 會員表

where month(出生日期) between 6 and 7

and day(出生日期) between 15 and 23

通過測試!請查收!

⑸ SQL查詢,將某數據分段

分隔符『-』的前後字元串字數是不是固定的,如果是固定的使用一樓的答案就行了,如果不是固定的可以寫一個分隔函數,在查詢的時候調用,

--按指定符號分割字元串,返回分割後指定索引的第幾個元素

CREATEfunctionGet_StrArrayStrOfIndex

(

@strnvarchar(4000),--要分割的字元串

@splitvarchar(10),--分隔符號

@indexint--取第幾個元素

)

returnsnvarchar(2048)

as

begin

declare@locationint

declare@startint

declare@nextint

declare@seedintset@str=ltrim(rtrim(@str))

set@start=1

set@next=1

set@seed=len(@split)set@location=charindex(@split,@str)

while@location<>0and@index>@next

begin

set@start=@location+@seed

set@location=charindex(@split,@str,@start)

set@next=@next+1

end

if@location=0select@location=len(@str)+1

--這兒存在兩種情況:1、字元串不存在分隔符號2、字元串中存在分隔符號,跳出while循環後,@location為0,那默認為字元串後邊有一個分隔符號。returnsubstring(@str,@start,@location-@start)

end

--查詢語句
selectdbo.Get_StrArrayStrOfIndex(A,'-',1)asA1,dbo.Get_StrArrayStrOfIndex(A,'-',2)asA2,dbo.Get_StrArrayStrOfIndex(A,'-',3)asA3,Bfromtablename

⑹ sql獲取記錄總數後,分段查找數據

你說的是一種排序演算法,這種演算法有比較規范的遞歸代碼。可以上網查一下,「快速排序」代碼,估計C語言的比較多,換成SQL就可以了,SQL的函數也支持遞歸調用。

⑺ sql語句分段查詢

select
(select
count(*)
from
penrson
where
age
BETWEEN
10
and
20)
as
[10-20歲]
,select
(select
count(*)
from
penrson
where
age
BETWEEN
30
and
40)
as
[30-40歲]
,select
(select
count(*)
from
penrson
where
age
BETWEEN
50
and
60)
as
[50-60歲]

⑻ 用SQL語句查詢年齡分段的分組查詢 我的數據表格式如下

--不知道你要的是不是這樣的結果

CreatetableT
(
籍貫varchar(10),性別varchar(2),生日varchar(10)
)

insertintotvalues('四川','男','19890627')
insertintotvalues('新疆','男','19930711')
insertintotvalues('河南','男','19890623')
insertintotvalues('四川','女','19880512')
insertintotvalues('新疆','男','19950425')
insertintotvalues('河南','女','19800304')

Select籍貫,性別,
Sum(CaseWhen年齡<=20Then1Else0End)As[0-20歲(人)],
Sum(CaseWhen年齡Between21And40Then1Else0End)As[21-40歲(人)],
Sum(CaseWhen年齡Between41And60Then1Else0End)As[41-60歲(人)],
Sum(CaseWhen年齡>=61Then1Else0End)As[60歲以上(人)]
From
(
Select*,Year(GETDATE())-Year(convert(Datetime,生日))As年齡
Fromt
)s
GroupBy籍貫,性別
withrollup

⑼ sql就是查一個很大的表,然後呢先查詢一半,如果有就不查詢另一半數據了

就是叫分段查詢吧,也叫分頁查詢。
是指在大數據中查詢並顯示中,每次只查詢一部分(一頁)數據返回,不是一次性全部將附合條件的數據都讀取在內存里。
這個不算什麼牛吧,就是第一頁取top N,第二頁在2N中選後N個(子查詢實現)以此類推。

⑽ sql 分段查詢語句怎麼寫

什麼庫? sqlserver access oracle?

access的話 還是在表裡多設置一個欄位讓他自動增減吧!~

sqlserver的話
select identity(int,1,1) rownum,name into #temp from 表
select * from #temp where rownum>10 and rownum<=20

oracle最簡單 有rownum可以直接用!~