[英]Find between with separated date fields (year,month,day)
我在分隔字段中的表格中有以下日期。 如何編寫查詢以顯示兩個日期之間的值。 例如:2/1/2011 和 2/6/2011 之間的值:
day month year value
--------------------------------------------------
2 6 2011 120
3 7 2011 130
5 5 2011 100
6 1 2011 50
我有同樣的情況,但月份列顯示月份名稱。 通過對給定查詢的輕微修改,我能夠獲取數據。
SELECT *
FROM Table_Name AS Tbl_Date
WHERE (Year * 10000 + DATEPART(mm, CAST(Month + Year AS DATETIME)) * 100 + 1
BETWEEN 20111101 AND 20121201)
希望這會有所幫助
正如其他人所說,我的第一個建議是使用日期。 或者,如果您需要比您的示例更詳細的信息,Datetime 或 Timestamp with Time Zone。
但如果你真的必須使用這些數據,我認為這樣的事情應該可以工作,這取決於你對 SQL 的風格:
SELECT value, CONVERT(DATE,CONCAT(CONCAT(CONCAT(CONCAT(day, "-"), month), "-"), year), 105) date FROM table_name where (2/1/2011) <= date and date <= (2/6/2011);
(with Oracle SQL, you can use to_date instead of convert and optionally use the || concatenation operator; with SQL server you have to use the + concatenation operator; with MySQL this should be right)
(2/1/2011) 和 (2/6/2011) 可以是與其他轉換類似的字符串,也可以是使用 PreparedStatement 或類似的東西直接作為日期輸入的字符串(這會更好)。
要轉換為 Date 以便於比較而不用擔心 dmy 或 mdy,以標准方式:
DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0)))
所以,像這樣的東西。 最安全的日期格式是yyyymmdd
(尤其是 SQL 服務器)
SELECT
value,
DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0))) AS realdate
FROM Mytable_name
WHERE
'20110201' <= DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0)))
and
DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0))) <= '20110206'
如果您使用的是 oracle 數據庫,那么您可以使用 TO_DATE 和 TO_CHAR 函數來實現此目標...
如下-
select * from table_name
where to_date(day||month||year,'DDMMYYYY')
between &mindate and &maxdate
最小日期你可以把 2-jan-2011 和最大日期作為 2-jun-2011
我希望它對你有用:)
好吧,我找到了我想要的答案謝謝大家
SELECT Tbl_Date.Value,Tbl_Date.Year,Tbl_Date.Month,Tbl_Date.Day from Tbl_Date where ((Tbl_Date.Year*10000)+(Tbl_Date.Month*100)+Tbl_Date.Day) between 110102 and 110602
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.