⑴ 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可以直接用!~