如何在SQL中檢索給定月份的所有客戶的生日?那麼MySQL呢? 我正在考慮在SQL Server中使用以下內容。每月生日SQL查詢
select c.name
from cust c
where datename(m,c.birthdate) = datename(m,@suppliedDate)
order by c.name
如何在SQL中檢索給定月份的所有客戶的生日?那麼MySQL呢? 我正在考慮在SQL Server中使用以下內容。每月生日SQL查詢
select c.name
from cust c
where datename(m,c.birthdate) = datename(m,@suppliedDate)
order by c.name
不要忘記了2月29日...
SELECT c.name
FROM cust c
WHERE (
MONTH(c.birthdate) = MONTH(@suppliedDate)
AND DAY(c.birthdate) = DAY(@suppliedDate)
) OR (
MONTH(c.birthdate) = 2 AND DAY(c.birthdate) = 29
AND MONTH(@suppliedDate) = 3 AND DAY(@suppliedDate) = 1
AND (YEAR(@suppliedDate) % 4 = 0) AND ((YEAR(@suppliedDate) % 100 != 0) OR (YEAR(@suppliedDate) % 400 = 0))
)
個人而言,我會用DATEPART而不是DATENAME作爲DATENAME是開放的根據地區不同的解釋。
其實我被誘惑加入birthmonth列,如果你希望客戶名單變得非常大。到目前爲止,我所看到的查詢(包括示例)將需要全表掃描,因爲您正在將數據列傳遞給函數並進行比較。如果表格大小不一,這可能需要相當長的時間,因爲沒有索引能夠提供幫助。
所以,我想補充的birthmonth列(索引),只是做(有可能MySQLisms):
SELECT name
FROM cust
WHERE birthmonth = MONTH(NOW())
ORDER BY name;
當然,它應該很容易設置birthmonth列或者與觸發或你的客戶代碼。
如果你在一個給定的個月要求所有的生日,那麼你應該提供個月,不是日期:
SELECT c.name
FROM cust c
WHERE datepart(m,c.birthdate) = @SuppliedMonth
爲什麼不爲MySQL的工作?當然他們有一個datepart()等效? – 2008-09-22 02:36:04
EXTRACT似乎做了我認爲datepart()所做的事情。例如:SELECT EXTRACT(day FROM`myDate`)。每個部分都有單獨的函數,但是(day(),month(),year()等) – nickf 2008-09-22 02:39:32