我正在查找给定日期范围内特定日期/天的列表,我发现了这个
declare @d datetime
select @d = '20100101' --'20090101' if you want 2009 etc etc
select dateadd(dd,number,@d) from master..spt_values
where type = 'p'
and year(dateadd(dd,number,@d))=year(@d)
and DATEPART(dw,dateadd(dd,number,@d)) = 7
在 get date of all saturdays in a given year - sql server
我想知道我是否可以使用开始日期和结束日期而不是年份,并且可以获得像星期六和星期日这样的两天清单。
问候
答案 0 :(得分:0)
这将为您提供@start和@end之间每天的天数:
declare @start date = '20151001', @end date = '20151017'
Select c = DATEDIFF(DAY, @start, @end)/ 7
+ case when (7 + DATEPART(WEEKDAY, @start) + (DATEDIFF(DAY, @start, @end)% 7) - d) % 7 <= (DATEDIFF(DAY, @start, @end)%7) then 1 else 0 end
From (values(1), (2), (3), (4), (5), (6), (7)) as days(d)
输出:
Day 1 2
Day 2 2
Day 3 2
Day 4 2
Day 5 3
Day 6 3
Day 7 3
它完全避免在@start和@end之间的每一天使用递归CTE和DATEADD。这只是一些数学。
对于多个日期,您也可以使用类似的东西,尽管它在大范围内效率不高:
declare @start date = '20151001', @end date = '20151017'
Select DATEADD(DAY, n, @start), DATEPART(WEEKDAY, DATEADD(DAY, n, @start))
From (
Select top(DATEDIFF(DAY, @start, @end)+1) ROW_NUMBER() over(order by n)-1
From (
Select 1 From (values(1), (1), (1), (1), (1), (1), (1), (1), (1), (1)) as v1(n)
Cross Join (values(1), (1), (1), (1), (1), (1), (1), (1), (1), (1)) as v2(n)
Cross Join (values(1), (1), (1), (1), (1), (1), (1), (1), (1), (1)) as v3(n)
) as v(n)
) as o(n)
Where DATEPART(WEEKDAY, DATEADD(DAY, n, @start)) in (7, 1)
输出:
DATE WEEKDAY
2015-10-03 7
2015-10-04 1
2015-10-10 7
2015-10-11 1
2015-10-17 7
这里,7 =星期六,1 =星期天。您可以添加1到7之间的任何值,也可以来自另一个表。 如果您使用DATENAME,它可以被日期名称替换。
然后您只需要添加一个组和/或一个总和来获得星期六和星期日的数量。
V1 / V2 / V3避免使用递归查询并快速生成从0到X(最多999)的数字列表。 X是@start和@end之间的差异。如果您需要10.000天的范围(等等......),请添加v4,但是超过2年就足够了1000,差不多是3。
答案 1 :(得分:0)
递归选择所有日期from_date
至To_Date
,然后使用DATEPART
检查是否为周末。
declare @from_date as date---your from date
declare @to_date as date---your to date
;WITH dates AS (
SELECT CONVERT( DATE, @from_date) AS a
UNION ALL
SELECT DATEADD( DAY, 1, a )
FROM dates
WHERE DATEADD( DAY, 1, a ) <= @to_date --including the @to_date
)
SELECT a
FROM dates
WHERE DATEPART( dw, a ) IN ( 1, 7 ) --- Saturday Or Sunday
如果您想查看“仅周日”
SELECT a
FROM dates
WHERE DATEPART( dw, a )=1
如果您想查看“仅周六”
SELECT a
FROM dates
WHERE DATEPART( dw, a )=7
答案 2 :(得分:-1)
rajeshmpanchal scrpit的一个小修改。
你可以试试这个:
$con = mysqli_connect("localhost","username","password","database");
$tname = "Big Bang";
$cname = "Mike";
$cemail = "test@gmail.com";
$cphone = "123-456-7898";
$teamToken = strtoupper(bin2hex(mcrypt_create_iv(6, MCRYPT_DEV_URANDOM)));
$query = "INSERT INTO teams (token, tname, captain, email, phone) VALUES ('" . $teamToken . "', '" . $tname . "', '" . $cname . "', '" . $cemail . "', '" . $cphone . "')";
if (mysqli_query($con, $query))
{
echo "Pass!";
}
else
{
echo $query;
}
mysqli_close($con);