sqlserver余數
給你個思路,不知道你是什麼資料庫,以sqlserver為例
select t.* from
(select row_number() over (order by 時間) rn,表名.* from 表名) t
where rn%30=1
也就是用行號去余數,把余數=1的取出來,就能做到每30條取1條了
⑵ SQL SERVER怎樣查詢表空間剩餘大小
可以使用sqlserver 系統函數獲取表空間大小
sql server表空間獲取
裡面有相應的列,表示未應用空間的大小。
請參閱!
⑶ sqlserver如何將身份證號碼的出生日期提取出來轉為日期類型數據
#include
"stdio.h"
void
main()
{
int
i;
/*身份證的第i位*/
int
s[17];
/*定義一個數組用來存放身份證的前17位*/
int
t[17];
/*各位相乘後的數組*/
int
m;
/*余數*/
int
t18;
/*身份證的第18位0--9*/
char
t18c;
/*身份證的第18位X*/
long
int
sum=0;
for(i=0;i<17;i++)
{
printf("請輸入身份證的第%d位:",i+1);
scanf("%d",&s[i]);
switch(i+1)
{
/*身份證的1到17位要乘的數一次是7
9
10
5
8
4
2
1
6
3
7
9
10
5
8
4
2
*/
case
1:t[i]=s[i]*7;break;
case
2:t[i]=s[i]*9;break;
case
3:t[i]=s[i]*10;break;
case
4:t[i]=s[i]*5;break;
case
5:t[i]=s[i]*8;break;
case
6:t[i]=s[i]*4;break;
case
7:t[i]=s[i]*2;break;
case
8:t[i]=s[i]*1;break;
case
9:t[i]=s[i]*6;break;
case
10:t[i]=s[i]*3;break;
case
11:t[i]=s[i]*7;break;
case
12:t[i]=s[i]*9;break;
case
13:t[i]=s[i]*10;break;
case
14:t[i]=s[i]*5;break;
case
15:t[i]=s[i]*8;break;
case
16:t[i]=s[i]*4;break;
case
17:t[i]=s[i]*2;break;
}
sum=sum+t[i];
}
printf("前17位相乘後的和為%ld\n",sum);
m=sum%17;
printf("對17取余後的值位:",m);
switch(m)
{
/*各個余數所對應第18位身份證號1
0
X
9
8
7
6
5
4
3
2*/
case
0:t18=1
;printf("這是一個合法的身份證號碼,第18位是%d",t18);break;
case
1:t18=0
;printf("這是一個合法的身份證號碼,第18位是%d",t18);break;
case
2:t18c='X';printf("這是一個合法的身份證號碼,第18位是%c",t18c);break;
case
3:t18=9
;printf("這是一個合法的身份證號碼,第18位是%d",t18);break;
case
4:t18=8
;printf("這是一個合法的身份證號碼,第18位是%d",t18);break;
case
5:t18=7
;printf("這是一個合法的身份證號碼,第18位是%d",t18);break;
case
6:t18=6
;printf("這是一個合法的身份證號碼,第18位是%d",t18);break;
case
7:t18=5
;printf("這是一個合法的身份證號碼,第18位是%d",t18);break;
case
8:t18=4
;printf("這是一個合法的身份證號碼,第18位是%d",t18);break;
case
9:t18=3
;printf("這是一個合法的身份證號碼,第18位是%d",t18);break;
case
10:t18=2
;printf("這是一個合法的身份證號碼,第18位是%d",t18);break;
default:printf("這不是一個合法的身份證號碼");
}
printf("\n");
}
⑷ sql Server如何編寫函數實現把十進制數轉換為二進制數求大神相助!!
創建函數
createFUNCTION[dbo].[Dec2Bin](@DecINT,@StrLenINT)
RETURNSVARCHAR(31)--INT型,4位元組,正數轉為二進制字元串最多31位
AS
BEGIN
DECLARE@BinStrASVARCHAR(31)--二進製表示的字元串
DECLARE@Div2ASINT--商
DECLARE@Mod2ASINT--模/余數
IF@Dec<0
RETURN'NULL'--不支持負數的轉換
SET@Div2=@Dec/2
SET@Mod2=@Dec%2
SET@BinStr=''
WHILE@Div2<>0
BEGIN
SET@BinStr=CAST(@Mod2ASCHAR(1))+@BinStr
SET@Dec=@Dec/2
SET@Div2=@Dec/2
SET@Mod2=@Dec%2
END;
SET@BinStr=CAST(@Mod2ASCHAR(1))+@BinStr--至此,已完成十進制到二進制的轉換
IF@StrLen>LEN(@BinStr)--如果用戶指定的長度大於實際長度,則需要左邊補0
BEGIN
IF@StrLen>31--返回的長度,最長為32
SET@StrLen=31
DECLARE@ZeroStrVARCHAR(31)--需要補充的"0000..."
DECLARE@OffsetLenTINYINT--需要補充幾個"0"
SET@ZeroStr=''
SET@OffsetLen=@StrLen-LEN(@BinStr)
WHILE@OffsetLen>0
BEGIN
SET@ZeroStr=@ZeroStr+'0'
SET@OffsetLen=@OffsetLen-1
END
SET@BinStr=@ZeroStr+@BinStr
END
RETURN@BinStr
END
調用函數
select[dbo].[Dec2Bin](3,8)
其中3是要轉換的數字,8是最後二進制的長度,不足位的前補0
⑸ SQL怎麼判斷查奇偶數
首先第一句話:雖然我不知到這兩個數是什麽,但我知道你一定也不知道。 從這句話說明孫手裡拿到的兩個數肯定都不是素數(什麼是素數?就是除了1和它本身以外不再有其他因數的自然數),不然的話,孫通過知道龐的和就可以唯一判斷出這兩個數字了
推理一:比如A=a+b,B=a*b;B=15,A=8,那麼很容易就猜想到了a=3,b=5 (因為對15進行拆分只有一種可能),所以對龐的第一句話產生了矛盾;那麼a,b兩個數可能是一個奇數,一個偶數;另外有位大神認為任意大於4的偶數都能被拆成兩個奇質數之和,但由於兩個質數都要小於99,所以龐手上的數可能為偶數,但這個偶數會接近200(有182,184,188,190,192,196和198),除此之外,只可能是奇數;舉例:如果龐涓手上是28,可以拆成11+17,當孫臏拿到了187這個積,馬上就可以猜出鬼穀子給他的兩個數是11和17,與龐涓肯定孫臏不知道這兩個數相矛盾,因此有可能拆成兩個2-99的質數和的數都要排除因此有可能拆成兩個2-99的質數和的數都要排除
推理二:龐的和數一定不是大於55的數。因為大於53的數始終能夠拆成質數53和另一個大於2的數,在2-99的限制下,這兩個數的乘積只有這唯一一種拆分方法。舉例:如果龐手上的和數是57,可以拆成53+4,當孫臏拿到212這個積,只有4*53這一種拆分可能性,因為2*106的另一種拆分方法導致有一個數超過99。由此排除55以上的所有所有數因此最後滿足以上條件的這樣的數字僅有11個:11,17,23,27,29,35,37,41,47,51,53。
第二句話:本來我不知道,現在知道了;這說明孫看了自己手上的積後,分解因式對應的所有拆分情況中有且僅有一種,兩個因數的和是以上11個數中的一個。
第三句話:那我也知道了;由於龐涓並不知道兩數積,所以只能從以上表格出發確定,最後得到兩個數字分別是4和13
也許上面的解析並不通俗易懂,其中涉及到很多數學知識和推理能力,如果感興趣可以基於上述講解自行進行推導;其實這道題的本質是基於每次的問題進行排除,盡可能的縮小范圍,最後得到結果;那麼最後通過SQL的方式來解決這類問題,或許通過sql(基於HQL)的方式可以幫助讀者更加清晰理解
⑹ 每個月的工作日有多少天,每個月剩餘多少天(去除工作日,法定節假日)的sql語句。
select year(日期),month(日期),is_working_day,count(*) from table group by is_working_day order by year(日期),month(日期);
mysql的寫法,如果sqlserver,
year(日期),month(日期) 換成
DateName(year,日期),DateName(month,日期)
