我正在寻找21月至4月20日的出生日期,这一年并不重要。而且当我搜索其他月份和日期时,它似乎正在出现。
select * from AllStudentInfo Where
((MONTH(birthDate) >= 3 and day(birthDate) >= 21)
OR
(MONTH(birthDate) <= 4 and day(birthDate) <= 20))
AND
(BGRStatus = 'S' OR BGRStatus = 'SL')
答案 0 :(得分:1)
你有可能想要发现和发现即将来临无论如何,您可以按如下方式创建虚拟日期:
SELECT DATEFROMPARTS (2017,month(birthDate),day(birthDate) as birthday
FROM AllStudentInfo
在这种情况下,您可以使用:
SELECT *
FROM AllStudentInfo
WHERE DATEFROMPARTS (2017,month(birthDate),day(birthDate)
BETWEEN '2017-03-21' AND '2017-04-20';
2017
年是任意的。关键是BETWEEN
子句中的日期是在同一年。
使用更现代的技术,您可以按如下方式组合:
WITH cte AS(
SELECT *,DATEFROMPARTS (2017,month(birthDate),day(birthDate) as birthDay
FROM AllStudentInfo
)
SELECT * FROM cte WHERE birthDay BETWEEN '2017-03-21' AND '2017-04-20';
cte
是公用表格表达式,它是使用子查询的替代方法。
这是一个更接近问题精神的替代方案。您可以使用format
函数生成一个纯粹是月份和月份的表达式。天:
format(birthDate,'MM-dd')
MM
是MSSQL表示2位数月份数的方式,而dd
是该月份的2位数日。
这样你可以使用:
format(birthDate,'MM-dd') BETWEEN '03-21' AND '04-20'
再次作为CTE:
WITH cte AS(
SELECT *,format(birthDate,'MM-dd') as birthDay
FROM AllStudentInfo
)
SELECT * FROM cte WHERE birthDay BETWEEN '03-21' AND '04-20';
你应该得到相同的结果,但完全忽略了这一年。
答案 1 :(得分:0)
将您的陈述切换为package main
import (
"customlogger"
"fmt"
"net/http"
)
func main() {
logger := customlogger.GetInstance()
logger.Println("Starting")
http.HandleFunc("/", sroot)
http.ListenAndServe(":8080", nil)
}
func sroot(w http.ResponseWriter, r *http.Request) {
logger := customlogger.GetInstance()
fmt.Fprintf(w, "welcome")
logger.Println("Starting")
}
喜欢这样
AND
使用select * from AllStudentInfo Where
((MONTH(birthDate) >= 3 and day(birthDate) >= 21)
AND --Make the change here
(MONTH(birthDate) <= 4 and day(birthDate) <= 20))
AND
(BGRStatus = 'S' OR BGRStatus = 'SL')
您正在查询该日期范围或该月份范围内的任何内容。因此,你会得到其他每个月的结果。